git - 撤消对单个文件的更改,而不显示在历史记录中

时间:2012-08-16 18:32:05

标签: git

两次提交之前,我意外地用一张受法律保护的图片改变了免费图片(我不允许分发该图片)。我还没有推到github。如何撤消对图片所做的这些更改,以便它不会显示在提交历史记录中?好像这张照片从未改变过。

3 个答案:

答案 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>的更改丢弃到两次提交中..