在我们进行存储后,有关合并的信息会丢失。下面比较通常的合并和存储合并。
git merge release-2013-10-29
# Everything works, cool
git commit -am "Upgraded to release 2013-10-29"
git push origin dev
结果如预期,合并提交:
在这种情况下,我需要隐藏合并更改,以便查看以前合并的行为。
git merge release-2013-11-06
# Conflicts fixed, but detected inappropriate behaviour
git stash
git stash pop
git commit -am "Upgraded to release 2013-11-06"
git push origin dev
结果:此提交不是"合并"了。我们还丢失了合并中包含的所有单个创作提交,就像我进行了所有这些更改一样。
那么,合并时我们不应该藏匿任何东西吗?那么如何避免这种行为呢?
答案 0 :(得分:4)
进行合并时,git stores a reference to the branch you're merging in MERGE_HEAD
。但似乎git stash
没有保存引用。
您可以尝试将MERGE_HEAD
设置回应用存储后合并的提交:
假设您正在将release-2013-11-06分支合并到master上,最后一次提交是 - 3be2c99
,那么您可以这样做:
git stash apply --index
git update-ref MERGE_HEAD 3be2c99
git status
# All conflicts fixed but you're still merging
# ....
注意应用存储时--index
的用法。这是在索引中获取更改所必需的,否则您将仅在工作树中获得隐藏的更改。
P.S:理想情况下,您应该避免存储未提交的合并。