如何取消Git更改

如何取消Git更改,git,Git,我想取消对已运行“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时 谢谢, Kevin您可以执行重基交互并删除提

我想取消对已运行“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

谢谢,
Kevin

您可以执行重基交互并删除提交。但如果以后的提交依赖于该提交,则可能无法工作

git-rebase-i头~5

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


如果您已推送到远程,请不要执行此操作。

除非A.java包含回购历史记录中不存在的私有数据,否则您应该提交文件的删除,而不是尝试删除以前存在的文件

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

简言之:

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

要小心重定基址,如果你已经推了你的提交,你将不得不强制推,并可能会遇到麻烦,除非你知道你在做什么


使用
git revert$shayouwnatorever
还原您不再需要的提交。这将基本上创建一个“反向”提交来撤消给定的提交。

请检查此项以检查如何取消提交git更改。不过,我不想从git repo中删除A.java。克隆repo之后,我修改并提交了a.java。现在,我想撤销这些更改并将A.java还原/返回到其原始克隆版本。假设
upstream/master
包含您想要的版本,
git checkout upstream/master A.java
将为您提供原始版本。我可以用https://... 链接到我克隆的回购协议?据我所知不是<代码>git远程添加上游https://...将使checkout命令在假定master存在于上游并且包含您想要的版本的情况下工作。您能告诉我“上游master”是什么意思吗?那么交互式的重新基址就是一种方法。因此,当我运行“git push origin”时,我能附加一个SHA来只推送我想要推送的SHA吗?我的一些git提交不应该推送到master。如果没有推送任何东西,我也同意@hvgotcodes的回答。我的回答是基于这样的假设,即你们都承诺并推动了你们的改变。如果你还没有推过,就把重心移开。