为什么在git 执行pull命令时有时候会增加一个commit?
- 最近在开发项目时,执行pull命令拉取远程仓库代码,本地总是莫名其妙生成一个merge的commit 信息,我也对比了前后的内容,发现没有冲突,也不需要什么特殊处理.
- 然后查了些资料, git pull == git fetch + git merge
- 也就是说当你拉取代码时是自动合并进你当前本地分支
如何复现这个问题?
- 开了一个demo,放在远程仓库,然后本地拉取两份代码 ab,模拟多人开发的环境,
- 首先 ab都拉取最新代码,此时是同步的,
- 接着 a在本地生成一个新的commit, b也生成一个新的commit, 此时 a 使用pull 拉取并提交 a commit;
- b 使用pull 命令,发现本地就多了一个新的merge commit,并不会产生冲突,如果进行推送远端也会多一个merge commit
总结: 也就是当你本地的分支和远程分支不同步时,自动合并就会产生这个问题
如何解决?
这里我们引入 --rebase, 使用变基的方式进行合并, 也就是 git pull --rebase
--rebase 和 merge 的区别可以参考Git merge和rebase分支合并命令的区别