2014-02-12 40 views
1

我们需要恢复到之前的提交,但由于自提交后发生的更改已经投入生产,我们无法用git reset销毁回购历史记录。恢复到先前提交的非破坏性

恢复到过去的提交已被解决herehere,但都没有提供令人满意的非破坏性解决方案。

我们试着按照@Ben's answer的方法检查前一个单独分支的提交,但是当我们试图将它合并到master时,我们得到一个“已经是最新的”。消息并没有发生。

$ git checkout 0766c053 -b reverted 
$ git checkout master 
$ git merge reverted 
Already up-to-date. 
+0

'git revert'中的不满意是什么?看起来它就是你正在寻找的东西。 – Amadan

+0

@ Amadan-'git revert'只能恢复一个特定的提交,忽略从此之后所做的任何提交。我们需要将*恢复为以前的提交。 Git没有'git revert --to'功能。 – Yarin

+1

啊我明白了。在这种情况下,这应该有所帮助:http://stackoverflow.com/a/1470452/240443 – Amadan

回答

4

我得到了它,从@Amadan和@BobSlocum,害羞而神秘的,是谁给了罚款answer,然后删除了它就走了感谢这个link ...

这里有所有你需要做的:

git revert --no-commit 0766c053..HEAD 

这将恢复从HEAD返回到提交散列的所有内容。 (--no-commit标志让git可以一次恢复所有提交,而不是使用该范围内的每个提交的消息来乱丢历史记录。)

+1

@ Amadan的链接在解释我所说的方面做得更好。不想看起来像我试图鲨鱼他的荣耀:) –

+1

不用担心。 :) +1,因为你写出了正确的答案。另外,值得注意的是一个通用的语法:如果你想从X到Y恢复所有的东西,'X^Y'工作。 ('X..Y'将从* X开始恢复所有*,而不是X本身)。 – Amadan

0

有人可以毫无疑问地煮了git reset序列做到这一点,但这里的直达航线:

git checkout -B master $(
     git commit-tree -p master -m - 0766c053^{tree} 
) 

git commit --amend它添加提交信息。