2

我想取消提交已运行“git commit”的更改。

特别是,我想指定文件。

例子:

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

注意我不想从我的仓库中删除 A.java。我只想将它返回到它的基本状态,即当我运行时git clone repo

谢谢,凯文

4

3 回答 3

3

小心变基,如果你已经推送了你的提交,你将不得不强制推送,除非你知道自己在做什么,否则可能会遇到麻烦。

用于git revert $SHAYOUWNATOREVERT恢复您不再需要的提交。这基本上会创建一个撤消给定提交的“反向”提交。

于 2012-10-09T19:20:21.917 回答
2

您可以进行变基交互并删除提交。但是,如果以后的提交依赖于该提交,它可能不起作用。

git rebase -i HEAD~5

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

如果您已推送到远程,请勿这样做。

于 2012-10-09T18:44:37.267 回答
2

除非 A.java 包含无法在 repo 历史记录中存在的私有数据,否则您应该删除该文件,而不是尝试删除它以前的存在。

git rm A.java

如果文件包含必须删除的敏感数据,则可以删除文件的历史记录,但它会重写 refs,需要强制推送,并且需要克隆或拉取当前 refs 的任何人的额外工作.

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

简而言之:

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

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

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

git checkout upstream/master A.java
于 2012-10-09T18:47:03.593 回答