我想取消提交已运行“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
。
谢谢,凯文
我想取消提交已运行“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
。
谢谢,凯文
小心变基,如果你已经推送了你的提交,你将不得不强制推送,除非你知道自己在做什么,否则可能会遇到麻烦。
用于git revert $SHAYOUWNATOREVERT
恢复您不再需要的提交。这基本上会创建一个撤消给定提交的“反向”提交。
您可以进行变基交互并删除提交。但是,如果以后的提交依赖于该提交,它可能不起作用。
git rebase -i HEAD~5
只需删除相应的行,然后保存并退出。
如果您已推送到远程,请勿这样做。
除非 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