浅析 在git 执行pull命令时增加一个commit

1,907 阅读1分钟

为什么在git 执行pull命令时有时候会增加一个commit?

  • 最近在开发项目时,执行pull命令拉取远程仓库代码,本地总是莫名其妙生成一个merge的commit 信息,我也对比了前后的内容,发现没有冲突,也不需要什么特殊处理.
  • 然后查了些资料, git pull == git fetch + git merge
  • 也就是说当你拉取代码时是自动合并进你当前本地分支

如何复现这个问题?

  1. 开了一个demo,放在远程仓库,然后本地拉取两份代码 ab,模拟多人开发的环境,
  2. 首先 ab都拉取最新代码,此时是同步的,
  3. 接着 a在本地生成一个新的commit, b也生成一个新的commit, 此时 a 使用pull 拉取并提交 a commit;
  4. b 使用pull 命令,发现本地就多了一个新的merge commit,并不会产生冲突,如果进行推送远端也会多一个merge commit

总结: 也就是当你本地的分支和远程分支不同步时,自动合并就会产生这个问题

如何解决?

这里我们引入 --rebase, 使用变基的方式进行合并, 也就是 git pull --rebase

--rebase 和 merge 的区别可以参考Git merge和rebase分支合并命令的区别