两次提交前,我不小心用受法律保护的图片更改了一张免费图片(好吧,我不允许分发该图片)。我还没有推送到github。如何撤消对图片所做的这些更改,使其不会出现在提交历史记录中?仿佛这张照片从未改变过。
3 回答
使用git rebase -i HEAD~2
. 当系统提示您要执行的操作时,对于您需要更改的提交,请将“pick”替换为“edit”。这将允许您编辑您指定的提交,这意味着编辑整个提交,而不仅仅是消息。
(或者,如果您根本不需要该提交,只需删除包含错误提交的行。变基将完成并使其不会发生提交。在这种情况下,无需阅读其余部分。 )
当您启动变基时(通过保存并退出您正在使用的任何编辑器),您将收到如下提示:
Stopeed at 98ad8ac... Add an image I really oughtn't add.
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
所以就这样做吧!对提交进行所需的更改(即删除非免费图像,将免费图像放回原处),然后运行git commit --amend
. 那将用新的提交替换您的错误提交。
(替代方案:git reset HEAD^
此时运行。这将使它好像没有发生提交,但提交中的所有更改都将在您的工作副本中,因此您可以根据需要暂存/退出/任何更改。然后git commit
照常运行。)
然后运行git rebase --continue
,Git 会在你的第一个提交之上应用你的第二个提交,你的历史将只包含正确的修复,而不是 duff 的。
git commit --amend
是你的朋友。
如果您需要在历史记录中进一步进行更改,那么git rebase --interactive
.
你可以做到git revert <commit>
,但它仍然会出现在历史中。
git reset --hard <commit>
如果它没有被推送,那么你可以通过两次提交来放弃更改..