GIT:如何保留其他历史变化,同时保持其他人不变?

时间:2011-10-26 10:47:33

标签: git github git-svn

说我已经为我的项目进行了N次更改并提交了N次。

在那之后,突然间,我发现N变化的一个变化导致了一个无法解决的问题。解决此问题的唯一方法是恢复特定的更改,同时,我需要保留所有其他更改(在此有问题的更改之前和之后的更改)这个有问题的变化)就像他们现在一样。

如何在GIT中解决这个问题?我的意思是如何只恢复一个历史变化并保留其前后的所有其他变化

4 个答案:

答案 0 :(得分:3)

Git社区书对这类事情非常有帮助。相关部分为here

最安全的选择是使用

$ git revert <commit-hash>

并解决任何冲突。您可以使用git rebase来执行此操作,但它会重写历史记录,并且在已经推送或公开的存储库中非常灾难性。此外,您可能希望保留显示您已进行更改的历史记录,并且必须将其更改回来。从长远来看,它提供的信息更多。

答案 1 :(得分:3)

正如其他人所说,安全的做法是做git revert。这将清楚地表明您正在“恢复”特定的变化。它将应用反向修补程序来撤消您作为参数提供的提交的效果。

另一种更致命的方法是使用git rebase -i并删除历史记录中的“错误提交”。这将从该提交开始重写历史记录。特定更改的历史记录将从树中删除,但如果您已经推送并且其他人已经撤消,那么如果您执行此操作,他们将看到合并冲突。

答案 2 :(得分:1)

使用git revert。这将创建一个新的提交,其中还原的还原提交的所有更改。这保留了历史。

答案 3 :(得分:0)

请注意,如果您有超过一个更改要还原,您还可以避免为您要恢复的每个提交打开编辑器:

git revert man page

--no-edit
  

使用此选项,“git revert”将不会启动提交消息编辑器。

这使脚本编写和链接更容易恢复。