说我已经为我的项目进行了N次更改并提交了N次。
在那之后,突然间,我发现N变化的一个变化导致了一个无法解决的问题。解决此问题的唯一方法是恢复特定的更改,同时,我需要保留所有其他更改(在此有问题的更改之前和之后的更改)这个有问题的变化)就像他们现在一样。
如何在GIT中解决这个问题?我的意思是如何只恢复一个历史变化并保留其前后的所有其他变化
答案 0 :(得分:3)
Git社区书对这类事情非常有帮助。相关部分为here。
最安全的选择是使用
$ git revert <commit-hash>
并解决任何冲突。您可以使用git rebase
来执行此操作,但它会重写历史记录,并且在已经推送或公开的存储库中非常灾难性。此外,您可能希望保留显示您已进行更改的历史记录,并且必须将其更改回来。从长远来看,它提供的信息更多。
答案 1 :(得分:3)
正如其他人所说,安全的做法是做git revert
。这将清楚地表明您正在“恢复”特定的变化。它将应用反向修补程序来撤消您作为参数提供的提交的效果。
另一种更致命的方法是使用git rebase -i
并删除历史记录中的“错误提交”。这将从该提交开始重写历史记录。特定更改的历史记录将从树中删除,但如果您已经推送并且其他人已经撤消,那么如果您执行此操作,他们将看到合并冲突。
答案 2 :(得分:1)
使用git revert。这将创建一个新的提交,其中还原的还原提交的所有更改。这保留了历史。
答案 3 :(得分:0)
请注意,如果您有超过一个更改要还原,您还可以避免为您要恢复的每个提交打开编辑器:
--no-edit
使用此选项,“
git revert
”将不会启动提交消息编辑器。
这使脚本编写和链接更容易恢复。