git rebase & git merge

虽然以前实习的时候用过一段时间git,但对git的很多概念还是一知半解。这不,今天又遇到了问题。
今天同步内核代码的时候,执行git pull,就出现了问题,提示有冲突不能提交。
我当时的反应时:what the fuck?我没有任何本地提交,为什么会有冲突?逗我呢?
于是用搜索引擎找答案。

git pull相当于git fetch 加上 git merge FETCH_HEAD.
如果只是更新代码,应该用rebase而不是merge。
那么rebase和merge有什么区别?可以理解为,merge是把远程分支的改动合并到自己的分支上,而rebase是把自己合并到远程分支上!
所以,如果只是更新,应该:

git pull --rebase

相当于:

git fetch
git rebase

这时,如果你的本地没有任何改动,就相当于完全更新了本地的分支。如果你有本地改动,则会重新以远程分支为标准重新生成log。
以后要提交patch,也得rebase,这样才能生成最新的patch。
再引申一下,在内核的开发模式中,所有的更新都是以patch的形式发邮件给各个分支的维护人的。对于开发patch的人来说,应该避免所有会commit的操作,因为你的commit没有任何意义,因为改动不会以push的形式发送到主分支上,并且主分支也不接受pulling request!
所以也不要revert,因为revert会生成新的提交。应该用reset。
另外今天还了解到,git add有多种用途。其核心是把改动放到暂存区。
今天还发现个很不错的git中文教程,记录一下:
https://github.com/geeeeeeeeek/git-recipes/wiki

你可能感兴趣的:(git rebase & git merge)