## 场景 当前在A分支,要求将当前分支的提交合并到B分支。 ## 常规合并 ```shell # 暂存当前未提交的改动 git stash -m "xxx" # 切换到B分支 git checkout B # 合并A分支到当前分支(即B分支) git merge A # 推送提交 git push origin B:B # 切换回A分支 git checkout A # 取出暂存的改动继续工作 git stash pop ``` 这种常规合并的操作方式不仅繁琐,而且要求当前分支不能有未提交的更新(意味着如果有未提交的改动,你必须先进行`stash`,否则无法切换分支),还有一个问题就是我们的项目是做了文件改动后自动增量编译的,意味着这一系列操作将会触发两次重编译(两次`checkout`),浪费大量的时间。 ## 快速合并 ```shell # 直接将当前分支合并到B分支 git push . HEAD:B # 推送提交 git push origin B:B ``` 这种常规合并的方式不需要任何的暂存、切换分支操作,也不会触发重编译,可节省大量时间。但是这种方式也有缺点,首先只支持`fast-forward`模式的合并,如果非`fast-forward`模式则需要先将B分支合并到当前分支,这样子就会对当前分支有侵入,其次用这种`push`的方式合并在`reflog`是不会有记录的,所以以后如果要回退,就不容易找到对应位置的`commit id`。如果你确定要合并的提交不会造成冲突且不会造成大的影响,可以使用这种方式合并。