如何解除Git变化


How to Uncommit Git Change

我想取消提交我运行"git commit"时所针对的更改。

特别是,我想指定文件。

例子:

1
2
3
4
5
6
> #5 commits ago
> commit -m"bug fix" A.java
>
> #bunch of commits occurred
>
> [command to uncommit] A.java

注意,我不想从repo中删除a.java。我只想把它恢复到它的基本状态,即运行git clone repo时。

谢谢,凯文


注意重新平衡,如果你已经推动了你的承诺,你将不得不强制推动,可能会遇到麻烦,除非你知道你在做什么。

使用git revert $SHAYOUWNATOREVERT恢复您不再需要的承诺。这将基本上创建一个"反向"提交,撤消给定的提交。


除非a.java包含repo历史记录中不存在的私有数据,否则应提交文件的删除操作,而不是尝试删除以前存在的文件。

1
git rm A.java

如果该文件包含必须删除的敏感数据,则可以删除该文件的历史记录,但它将重写引用,需要强制执行,并要求克隆或提取当前引用的任何人进行额外工作。

https://help.github.com/articles/remove-sensitive-data

简而言之:

1
git filter-branch --index-filter 'git rm --cached --ignore-unmatch A.java' --prune-empty --tag-name-filter cat -- --all

如果尝试从另一个回购或分支恢复版本,请编辑以合并答案:

如果a.java是您修改过的文件,并且您希望将其返回到upstream/master上提供的原始版本,那么这将替换您当前的副本:

1
git checkout upstream/master A.java


您可以执行一个REBASE交互并删除提交。但是,如果以后的提交依赖于该提交,它可能不会工作。

git rebase -i HEAD~5

只需删除相应的行,然后保存并退出。

如果您已按下遥控器,请不要执行此操作。