Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git中保持历史记录的清晰_Git_Git Merge - Fatal编程技术网

如何在git中保持历史记录的清晰

如何在git中保持历史记录的清晰,git,git-merge,Git,Git Merge,我有以下情况: 我有两个分支:X和Y 一段时间后,a决定合并他们 在X中合并Y之后,我决定在X中再添加一个commit 现在,在X中,最后两次提交是:1)合并提交,2)我决定添加的第二次提交 问题是,如何合并这两个最后提交 我使用了git-rebase-I HEAD~1,但看不到合并提交。哪种选择?我这样做是为了澄清历史。如果您想做的是收回合并并在合并Y之前应用X: git checkout X~2 # go to revision before merge git cherry-pick

我有以下情况:

  • 我有两个分支:X和Y
  • 一段时间后,a决定合并他们
  • 在X中合并Y之后,我决定在X中再添加一个commit
  • 现在,在X中,最后两次提交是:1)合并提交,2)我决定添加的第二次提交
问题是,如何合并这两个最后提交


我使用了
git-rebase-I HEAD~1
,但看不到合并提交。哪种选择?我这样做是为了澄清历史。

如果您想做的是收回合并并在合并Y之前应用X:

git checkout X~2 # go to revision before merge
git cherry-pick X # apply the revision at the tip of X
git merge Y -m "Merging Y"
# if you like the results
git branch -f X
git checkout X

PS关注@0andriy的担忧,很高兴看到这改写了历史。如果你已经把你在X上拥有的东西推到了回购协议上,而其他人可能已经开始玩它了,那么重写历史被认为是不礼貌的。另一方面,如果你还没有把它推到任何地方,那么请随意重写历史。

你从哪个分支运行了
git-rebase
?@Thomas Bartelmess,从X
git-rebase…
纠正历史(使其尽可能线性化)。这就是合并提交消失的原因。无法重做合并并同时保留历史记录。从一开始,反向合并就是Git历史的毒药。历史将因此而被打破。啊,什么?如果这是一个还没有被推动的东西(我们不知道),玩东西是很好的。是的,从错误的游戏开始,我们会鼓励重复它。至少你必须在回答中详细说明这一切。JFYI:没有办法通过更新合并来保持历史记录。现在更好了?太好了!非常感谢。