两次提交之前,我意外地用一张受法律保护的图片改变了免费图片(我不允许分发该图片)。我还没有推到github。如何撤消对图片所做的这些更改,以便它不会显示在提交历史记录中?好像这张照片从未改变过。
答案 0 :(得分:5)
使用git rebase -i HEAD~2
。当系统提示您要执行的操作时,对于需要更改的提交,请将“pick”替换为“edit”。这将允许您编辑您指定的提交,这意味着编辑整个提交,而不仅仅是消息。
(或者,如果您根本不需要该提交,只需删除包含错误提交的行。该rebase将完成并使其完成,以便从未发生提交。在这种情况下,无需读取其余内容这个。)
当你踢掉rebase(通过保存并退出你正在使用的任何编辑器)时,你会得到一个类似下面的提示:
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。
答案 1 :(得分:1)
git commit --amend
是你的朋友。
如果您需要在历史记录中进一步进行更改,请git rebase --interactive
。
答案 2 :(得分:-1)
你可以git revert <commit>
,但它仍会在历史中显示。
如果没有推送,那么你可以将git reset --hard <commit>
的更改丢弃到两次提交中..