2

两次提交前,我不小心用受法律保护的图片更改了一张免费图片(好吧,我不允许分发该图片)。我还没有推送到github。如何撤消对图片所做的这些更改,使其不会出现在提交历史记录中?仿佛这张照片从未改变过。

4

3 回答 3

5

使用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 的。

于 2012-08-16T18:51:47.397 回答
1

git commit --amend是你的朋友。

如果您需要在历史记录中进一步进行更改,那么git rebase --interactive.

于 2012-08-16T18:33:28.300 回答
-1

你可以做到git revert <commit>,但它仍然会出现在历史中。

git reset --hard <commit>如果它没有被推送,那么你可以通过两次提交来放弃更改..

于 2012-08-16T18:53:55.167 回答