如何解除Git变化

时间:2012-10-09 18:38:42

标签: 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时。

谢谢, 凯文

3 个答案:

答案 0 :(得分:3)

小心变调,如果你已经推动了你的提交,你必须强行推动,除非你知道自己在做什么,否则可能会遇到麻烦。

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

答案 1 :(得分:2)

您可以执行rebase交互并删除提交。如果稍后提交依赖于该提交,则可能无效。

git rebase -i HEAD~5

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

如果你已经推到遥控器,请不要这样做。

答案 2 :(得分:2)

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

git rm A.java

如果文件包含必须删除的敏感数据,则可以删除文件的历史记录,但它会重写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