如何在不搞砸Git历史的情况下退出一系列更改

时间:2011-08-30 18:38:17

标签: git

我想以群组友好的方式撤消一些更改而不将其从历史记录中删除。目前,我有这个(*表示主人):

[rev 1] -- [rev 2] -- [rev 3] -- [rev 4] -- [rev 5] -- [*rev 6]

我想回到第2版,但是以一种有意义的方式。我相信它应该是这样的:

[rev 1] -- [rev 2] -- [rev 3] -- [rev 4] -- [rev 5] -- [rev 6] -- [*rev 7]
               |                                                   |
               \---------------------------------------------------/

其中rev 7是6和2的合并(而“merge”实际上只是“盲目保持rev 2”)。没有创建新头。我该怎么做?

提前致谢。

1 个答案:

答案 0 :(得分:4)

你会

git branch temp
git reset --hard rev2
git reset --soft temp
git add -A
git commit -m "this commit makes all the changes so that the tree at rev7 looks like the tree at rev2"
git branch -d temp

Scott Chacon有一篇关于重置命令和其他修饰符(硬,软和混合)的文章。

没有临时分支,你可以:

git reset --hard rev2
git reset --soft HEAD@{1}
git add -A
git commit -m "this commit makes all the changes so that the tree at rev7 looks like the tree at rev2"

如果你想在那里合并,你可以:

git merge --no-ff -s ours rev2

(小心,这与带有“我们的”选项的递归策略不同)