我想取消对我运行“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
时。
谢谢, 凯文
答案 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