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

dav*_*v1d 2 git

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

me_*_*and 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
Run Code Online (Sandbox Code Playgroud)

那就是这样做的!进行提交所需的更改(即删除非自由图像,放回免费图像),然后运行git commit --amend.那将用新的替换你的错误提交.

(替代方案:git reset HEAD^在此时运行.这将使得好像提交没有发生,但提交中的所有更改都将在您的工作副本中,因此您可以根据需要暂存/退出/进行任何更改.然后git commit照常运行.)

然后运行git rebase --continue,Git将在你的第一个提交之上应用你的第二个提交,你的历史将只包含正确的修复,而不是duff.