场景:
在协同开发的过程中,既要保证自己的代码完整不被覆盖,又需要去拉取远程在你之前提交还未拉取的代码,但这里有一个问题,为了使提交记录更加整洁美观,不会出现 Merge Commit 的情况,就需要合理使用 git 命令。
什么是 Merge Commit ?
它会让 Git 历史图看起来像“蜘蛛网”,尤其是在多人开发的时候。
情况1:
假如有两个分支:
当你在 master 分支上执行:
git merge feature
Git 会生成一个新的提交 M:
M 就是 Merge Commit,它有两个父节点(一个是 C,一个是 E),表示这是一个合并操作。
情况2:
你和同事都在 master 分支开发:
此时你执行了 git pull,Git 会生成一个新的合并提交 M:
(因为 git pull 默认是 fetch + merge)
M 就是 Merge Commit,它把你本地的提交(D-E)和远程的提交(C)合并成一个新的共同节点。
Merge Commit 的作用:
✅ 记录了 两个分支何时被合并;
✅ 保留了分支开发的历史;
❌ 但如果频繁合并,会导致提交历史变得混乱。所以有时候大家更喜欢用:
git pull --rebase
这样拉取时会把你的提交 “平铺”到最新提交之后,不会生成 Merge Commit,提交历史更线性清晰:
如果我们在没准备好 commit 提交自己新鲜出炉的代码之前,去执行 git pull,通常会收到提示需要先 commit 再 pull, 可以这样做:
git stash # 保存当前修改到 stash 区
git pull --rebase # 拉取远程最新代码
git stash pop # 恢复刚刚保存的修改
注意:如果你本地和远程代码改了同一位置,stash pop 时可能会有冲突。