我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
当前回答
我找到了这个网站 用来描述如何撤销 你对存储库的承诺
一些命令 :
git commit --amend # Change last commit
git reset HEAD~1 --soft # Undo last commit
其他回答
撤消上一个任务
在很多情况下,你真的想撤销你代码中的最后一项承诺。例如,因为你想对它进行广泛的重组,甚至完全抛弃它!
在这种情况下,"重置"命令就是你最好的朋友:
$ git reset --soft HEAD~1
以上命令( 重置) 将把您当前的 HEAD 分支倒回指定的修改 。 在以上的例子中, 我们想回到当前修改前的修改中, 有效地取消我们上次的修改 。
注意 -- soft 旗号 : 这样可以确保未撤销修改的更改被保存。 在运行命令后, 您会发现您的工作副本中这些更改是未承诺的本地修改 。
如果您不想保留这些更改, 请使用 -- 硬旗 。 您确定不需要这些更改时, 一定要这样做 。
$ git reset --hard HEAD~1
调
为了消除(所有变化)最后承诺、最后2承诺和最后n承诺:
git reset --hard HEAD~1
git reset --hard HEAD~2
...
git reset --hard HEAD~n
在做出具体承诺后,要消除任何东西:
git reset --hard <commit sha>
例如,
git reset --hard 0d12345
谨慎使用硬选项 : 它会同时删除您回购的本地更改, 并返回到上一个提及的承诺 。 您只应该运行此选项, 前提是您确定您在最后一次承诺中搞砸了, 并且想要回到过去 。
作为副注释,大约7个承诺的散列字母就足够了,但在更大的项目中,你可能需要最多12个字母才能独有。如果您愿意,也可以使用整个承诺的 SHA 。
上述命令在GitHub也为Windows服务。
我想撤销我们共享存储库中最新的五个承诺。 我查了我想回溯到的订正代号 。 然后我输入了下面的内容 。
prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To git@bitbucket.org:thecompany/prometheus.git
+ 09a6480...5a74047 master -> master (forced update)
prompt>
我更喜欢用Git rebase - i 来做这份工作,因为一个不错的名单会出现在我可以选择摆脱承诺的地方。它可能不像这里其他答案那样直接,但它只是感觉是正确的。
选择要列出多少个承诺, 然后这样引用( 加入最后 3 个)
git rebase -i HEAD~3
样本列表
pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support
然后 Git 将删除任何您删除的线条 。
我从Bitbucket拿到了身份证明 然后就做了:
git checkout commitID .
示例:
git checkout 7991072 .
它又把它恢复到那个承诺的工作副本上。