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时。
谢谢,凯文
- 查看stackoverflow.com/questions/2845731/…
- 请单击此处检查如何取消提交Git更改。
注意重新平衡,如果你已经推动了你的承诺,你将不得不强制推动,可能会遇到麻烦,除非你知道你在做什么。
使用git revert $SHAYOUWNATOREVERT恢复您不再需要的承诺。这将基本上创建一个"反向"提交,撤消给定的提交。
- 然后,交互式的钢筋网就是一条路。
- 所以当我运行"git push-origin"时,我可以附加一个sha来只推我想推的sha吗?我的一些Git承诺不应该推给master。
- 如果什么都没有推,我也会同意@hvgotcodes'的回答。我的回答是基于这样一个假设:你们都承诺并推动了你们的改变。如果你还没有推的话,就把它重新绑起来。
除非a.java包含repo历史记录中不存在的私有数据,否则应提交文件的删除操作,而不是尝试删除以前存在的文件。
如果该文件包含必须删除的敏感数据,则可以删除该文件的历史记录,但它将重写引用,需要强制执行,并要求克隆或提取当前引用的任何人进行额外工作。
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 |
- 不过,我不想从git repo中删除a.java。克隆了一个repo之后,我修改并提交了a.java。现在,我想撤消这些更改,并将a.java还原/返回到它原来的克隆版本。
- 假设upstream/master包含您想要的版本,git checkout upstream/master A.java将获得原始版本。
- 我可以用https://替换"upstream/master"吗?链接到我克隆的repo?
- 据我所知。如果master存在于上游并且包含您想要的版本,那么git remote add upstream https://...将使checkout命令工作。
- 你能告诉我"上游大师"是什么意思吗?
- upstream通常用于指你从中获得的回购。它通常被用作您分叉的存储库的远程名称,但没有什么需要您这样做的。你可以用remote add命令中的任何命令替换upstream。master是您想要的分支名称。它通常是默认/主要分支。如果您分叉了一个不同的分支,您将希望继续使用该分支,而不是master。关于上游/下游的更多信息:stackoverflow.com/questions/2739376/…
您可以执行一个REBASE交互并删除提交。但是,如果以后的提交依赖于该提交,它可能不会工作。
git rebase -i HEAD~5。
只需删除相应的行,然后保存并退出。
如果您已按下遥控器,请不要执行此操作。