有一个远程仓库origin:
本地在此基础上又进行了两次提交:
这时候其他人进行了一次远程push:
因为git是分布式的,原则上可以不用连服务器,所以此时本地并不知道远程分支已经变更(本地的origin/master已经过时):
git fetch命令会将远程最新的版本拉取到本地,但是并不会影响本地的分支线:
git fetch <远程主机名> <远程分支>
git meger会将本地和远程的最新提交混合起来,并生成新的最新提交(混合并解决冲突后的提交):
git pull命令等于git fetch + git meger命令。
我们再看下上面git fetch命令后的本地状态:
这时候我们并不想混合提交,而是想在C2的基础上直接提交L2和L3,这时候在提交历史线上不会有分支线。这个可以用git rebase命令实现:
日常开发步骤如下:
- git fetch
- git rebase
- 解决冲突
- git add 冲突文件
- git rebase –continue
- git push
其中,3、4、5点,如果没遇到冲突就不用进行,直接push上去。
当遇到冲突时,git会提示patch failed,并要我们解决问题了再执行git rebase --continue