Git/Bitbucket:将新分支合并到master后如何避免HEAD指向原分支?
解决合并后HEAD同时指向master和Feature_A的问题
问题原因
你遇到的是GitFast-forward合并导致的情况:当Feature_A从master分支拉出后,master在你开发Feature_A期间没有新增提交,执行git merge Feature_A时,Git会直接把master分支指针移动到Feature_A的最新提交上,此时两个分支指向同一个提交,所以HEAD会同时显示关联这两个分支。
解决方案
1. 已完成合并的处理方式
方式一:删除Feature_A分支(最简单)
如果后续不再需要Feature_A分支,直接删除即可让HEAD只关联master:
git branch -d Feature_A
删除后执行git status,HEAD就只会显示HEAD -> master, origin/master, origin/HEAD。
方式二:重置后重新做非Fast-forward合并
如果需要保留Feature_A分支,且让master与它指向不同提交:
- 先通过
git reflog找到合并前master的提交记录,比如输出里类似abcd123 master@{1}: merge Feature_A: Fast-forward的行,master@{1}就是合并前的master提交。 - 重置master到合并前状态:
git reset --hard master@{1}
- 重新执行带
--no-ff参数的合并,强制生成新的合并提交:
git merge --no-ff Feature_A
这样master会有一个新的合并提交,和Feature_A的提交分开,HEAD就只会关联master了。
方式三:给master添加空提交
快速让master与Feature_A指向不同提交的小技巧:
git commit --allow-empty -m "分离master与Feature_A分支"
这个命令会给master创建一个空内容的新提交,此时master指针向前移动,与Feature_A的提交分开,HEAD就只关联master了。
2. 未来合并的预防措施
以后合并Feature分支到master时,直接用--no-ff参数强制生成合并提交,避免Fast-forward:
git checkout master git merge --no-ff Feature_A
这样每次合并都会生成新的合并节点,master和Feature分支的指针不会重合,HEAD就只会关联master。
内容的提问来源于stack exchange,提问作者nique
相关产品推荐
相关产品推荐

