存储时合并状态丢失

时间:2014-07-08 16:57:47

标签: git merge

在我们进行存储后,有关合并的信息会丢失。下面比较通常的合并和存储合并。

右:合并+推送

git merge release-2013-10-29
# Everything works, cool
git commit -am "Upgraded to release 2013-10-29"
git push origin dev

结果如预期,合并提交:

enter image description here

错误:合并+存储+推送

在这种情况下,我需要隐藏合并更改,以便查看以前合并的行为。

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

结果:此提交不是"合并"了。我们还丢失了合并中包含的所有单个创作提交,就像进行了所有这些更改一样。

enter image description here


那么,合并时我们不应该藏匿任何东西吗?那么如何避免这种行为呢?

1 个答案:

答案 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:理想情况下,您应该避免存储未提交的合并。