git rebase & fetch小结

对于git的使用,平时都是git pull & git push,最近开发使用到了新的命令git rebase & git fetch ,记录一下

关于git fetch

直接说git fetch也许会有些陌生,但说起git pull肯定会了解,git pull的作用是将远程分支拉回到本地,这中间其实做了两件事:拉取与合并。

  • 拉取:将远程代码拉到本地,此时还没有合并。如果使用git branch -a的话,可以看到一个origin/xxxx的分支,这就是本地的远程分支。
  • 合并:将本地的远程分支(origin/xxxx)合并到本地分支(xxxx)。

这里的拉取对应git fetch,合并对应git merge

注意git fetch默认会拉取全部的远程分支,而git pull只是拉取合并本地当前所在分支


关于git rebase

git merge是一个经常使用的命令,可以将多个分支合并到一起,但是这样呈现的git节点树是不太友好的,很容易多条分支线错综复杂,不能直观的看出所做的更改,这显然不够合理
git rebase & fetch小结_第1张图片

为了应对这种情况,出现了一种更好的做法,以一种的方式来将节点接到主分支的末端,最后呈现给人的就是一条长长的主分支,十分干净明了,这就是rebase。
git rebase & fetch小结_第2张图片

在当前功能分支上正常开发,开发完毕后,需要合并到主分支时,平常的思路是:

  1. 切到本地主分支,git pull代码进行更新
  2. 切到本地功能分支
  3. merge冲突
  4. push
  5. 提个MR,合并到主分支。

rebase的思路是:

  1. git fetch代码拉取代码(此时远程代码是在origin/master上)
  2. git rebase -i origin/master变基到主分支后
  3. merge冲突
  4. push -f(强制推送)
  5. 提个MR,合并到主分支

这里用rebase -i的原因是,如果在功能分支上进行了多次commit,合到主分支上应该只保留一个。这时候我们可以使用git rebase -i origin/[xxx]来进行提交,具体的可以看命令行提示。但需要注意,从上到下,在p标记前不可以使用s标记,否则会报错。

merge结束后,可以使用git rebase --continue来继续rebase,也可以使用git rebase --abort来取消掉rebase。


关于git graph

如果你使用的是vscode,那么可以考虑使用该插件,原生的git log是不够友好易读的,使用该插件可以清晰的看到所有节点的情况。
如果使用git rebasegit graph还是错综复杂,那么应该是没有删除已开发完成的功能分支,删除之后就一目了然了。

你可能感兴趣的:(git)