Git学习 - 2023-06-08

2023暑期学习

  • Git基础
  • git pull --rebase VS git pull
  • 几种merge的方法
  • 如何把master的内容更新到分支上
  • 详尽介绍 git pull
  • 如何将一个分支上的修改转移到另一个分支上
  • 其他命令

Git基础

git branch branch-name
# 创建一个新的分支
=========================
git checkout branch-name
# 切换到新的分支
=========================
git log
# 查看所有的commits操作 以及显示对应的hash
git log --online --graph --all 
# 以图像的方式显示出所有commits的操作
=========================
git status 
# 显示工作目录和暂存区域的状态。 
# 它可以让您查看哪些变更已commit,哪些尚未commit,以及哪些文件未被Git 跟踪untracked。 
# 状态输出不显示有关已提交项目历史记录的任何信息
=========================

对于未跟踪的文件,通常分为两类。要么是刚刚添加到项目中但尚未提交的文件,要么是编译后的二进制文件,比如 .pyc、.obj、.exe 等等,或者是运行了什么模型产生的文件。

git show log-hash
# 显示提交的所有内容
=========================
git diff log-hash
# 显示更改的内容
=========================
git branch -a |grep layers
# 显示所有的 远程跟踪的分支和本地分支【包含layers的名字】
=========================
git reset log-hash  
# 回退到指定版本
=========================
git reset --hard origin/master 
# 将本地的状态回退到和远程的一样 
# throw away all my staged and unstaged changes, 
# forget everything on my current local branch 
# and make it exactly the same as origin/master
=========================

git pull --rebase VS git pull

git pull --rebase -->
git pull就是先fetch,然后执行merge操作,如果加-rebase参数,就是使用git rebase代替git merge 。更新本地仓库

那 merge 和 rebase的区别在哪
Git学习 - 2023-06-08_第1张图片
可以看到merge操作会生成一个新的节点,之前提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的操作。

通过上面可以看到,想要更好的提交树,使用rebase操作会更好一点,这样可以线性的看到每一次提交,并且没有增加提交节点。
在操作中。merge操作遇到冲突时候,当前merge不能继续下去。手动修改冲突内容后,add 修改,commit 就可以了
而rebase操作的话,会中断rebase,同时会提示去解决冲突。解决冲突后,将修改add后执行git rebase -continue继续操作。

===========

几种merge的方法

https://www.youtube.com/watch?v=CRlGDDprdOQ
https://morningspace.github.io/tech/git-merge-stories-1/

一开始, master有两个commits。m1 --> m2
然后你拉下来进行,并创建了一个feature branch进行修改,所以你的logs为 m1 --> m2 --> f1 --> f2
但此时 另一个开发者已经对matser进行修改 所以master的logs变成 m1 --> m2 --> m3
此时 你需要如何解决并merge呢。
有几种方法
(1)merge
(2)squash merge
(3)rebase

git rebase master 

就可以把master的东西跟自己的分支合并。【在这之前 需要checkout到master分支,把最新的远程master pull下来】
或者直接用 git pull --rebase origin master 或者是 git pull --rebase

如何把master的内容更新到分支上

https://blog.csdn.net/chen134225/article/details/100128593
当你在work on你的分支的时候,这个时候,很可能远程master的内容已经有更新了。这个时候,必须要把远程的内容更新到你的分支上,如果有conflicts 你需要手动来解决,再push上去。
下面是具体的步骤:
(1)切回master的分支

git checkout master

(2)将远程的master代码pull到本地

git pull 

(3)切换到你的分支下,比如是dev

git checkout dev

(4)合并master到dev分支

git merge master

如果在合并的过程中,提示某文件出现冲突了,手动修改一下这个文件,修改成自己想要内容;然后add和commit一下这个文件。

(5)将本地分支的代码push到远程仓库对应的分支上

git push

或者最简单的方式是直接使用

git pull --rebase

这个会把最新的origin master的code pull下来 跟你现在的分支进行合并。

详尽介绍 git pull

命令查看关联的主机名字

git remote -v
ouput:
origin  git@github.com:jquery/jquery.git (fetch)
origin  git@github.com:jquery/jquery.git (push)

这里关联的主机名字为origin。

git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。
默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

git fetch <远程主机名> <分支名>

比如,取回origin主机的master分支。

git fetch origin master

查看远程所有分支

git branch -r
output:
  origin/3_layers
  origin/ASKEXIT-145.bid_handler_timeout_exp
  origin/ASKEXIT-146.p1
  origin/ASKEXIT-146.p2
  origin/ASKEXIT-146.p3
  origin/AddAgencyEntity
  ...
  ...

补充
有时候分支过多,可以使用这个命令查找你的那个分支

 git branch -r|grep layer
 # 意思是查找所有包含layer的远程分支

查看所有的分支

git branch -a
output:
* new_3layers
  remotes/origin/2275_run_test_env_in_jenkins
  remotes/origin/3_layers
  remotes/origin/ASKEXIT-145.bid_handler_timeout_exp
  remotes/origin/ASKEXIT-146.p1
  remotes/origin/ASKEXIT-146.p2
  remotes/origin/ASKEXIT-146.p3

所以这里的关键点事
远程主机名 --> origin
远程分支名 --> 3_layers
本地分支名 --> new_3layers
当你要pull 拉下来的时候,使用命令

git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的3_layers分支,与本地的new_3layers分支合并,需要写成下面这样

git pull origin 3_layers:new_3layers

如果远程分支是与当前分支合并,则冒号后面的部分可以省略
直接写成

git pull origin 3_layers

如果想要rebase的模式进行merge的话,则直接用

git pull --rebase origin 3_layers

如果存在追踪关系,则直接可以用 git pull
同理,git push也是
但为了理解,还是用全。

git push <远程主机名> <本地分支名>:<远程分支名>
git push origin new_3layers:3_layers

介绍Git的非常详尽的文章
https://www.ruanyifeng.com/blog/2014/06/git_remote.html

如何将一个分支上的修改转移到另一个分支上

https://blog.51cto.com/u_15064646/3690119
复制粘贴的命令

git stash                    //把暂存区内的修改存储起来
git checkout dev             //切换到正确的分支
git stash pop                //将存储的修改取出来

如果已经commit了呢?

git reset HEAD^              // 撤回到刚刚commit之前的状态

再继续上面的复制粘贴

其他命令

将本地的main分支重置到远程版本库:

git reset --hard origin/main

清理任何未被追踪的变化

git clean -xdf

你可能感兴趣的:(2023暑期学习,git,学习,github)