我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
当前回答
每个人都以如此复杂的方式发表意见。
如果您想要从分支中删除最后一项承诺, 最简单的方法是:
git reset --hard HEAD~1
现在,为了摆脱你最后的承诺,你必须
git push --force
这就对了,这会消除你最后的承诺
其他回答
如果你们在本地做出你们不喜欢的事,而他们还没有被推倒,而你们却可以把事情重现为以往的善事。这好像坏事从未发生过。下面是这样的:
在您的终端中( 终端、 Git Bash 或 Windows 命令提示) , 浏览到您的 Git repo 的文件夹中。 运行 git 状态, 并确保您有干净的工作树。 每个承诺都有一个独特的散列( 看起来像 2f5451f ) 。 您需要找到最后一件好事的散列( 您想要返回到哪个地方 ) 。 这里有两个地方您可以看到要承诺的散列 : 在 GitHub 或 Bitbucket 网站或网站的承诺历史中 。 在您的终端中( 终端、 Git Bash 或 Windows 命令快递) 运行命令 git 日志 -- 在线, 一旦您知道最后一件好事的仓列( 您想要返回到哪个地方) , 请运行以下的命令( 将 2f5451f 与您的承诺重写 ) :
git reset 2f5451f
git reset --hard 2f5451f
注意 : 如果您确实重置承诺, 将会删除, 但更改将显示为未承诺, 允许您访问代码 。 这是最安全的选项, 因为也许您想要一些代码, 现在您可以做出一些好的更改和新承诺 。 通常您会想要撤销承诺, 丢弃代码, 这正是 Git 重置 -- hard 所做的 。
撤销一项承诺是有点吓人,如果你不知道它是如何运作的。 但如果你理解的话,它其实很容易。我会告诉你4种不同的方式, 你可以解除一项承诺。
说你们有这个,C是你们的总部,(F)是你们档案的状态。
(F)
A-B-C
↑
master
选项1: git 重设 -- hard
您想要销毁C实施者, 并丢弃任何未承诺的更改 。 您这样做 :
git reset --hard HEAD~1
结果是:
(F)
A-B
↑
master
B现在是 HEAD 。 因为您使用 -- hard 键, 您的文件被重置为在承诺 B 状态 。
备选2:Git重置
实施 C 可能不是一场灾难, 只是有点不对劲 。 您想要撤销此承诺, 但要在做出更好的承诺之前先保留您的更改, 然后再进行编辑 。 从这里重新开始, 以 C 为主机 :
(F)
A-B-C
↑
master
做到这一点, 离开 -- hard :
git reset HEAD~1
在这种情况下,结果是:
(F)
A-B-C
↑
master
在两种情况下, HEAD 都只是最新承诺的指针。 当您重置 HEAD~ 1 时, 您会告诉 Git 将 HEAD 指针移回一个。 但是( 除非使用 -- hard) 您会离开文件原样。 因此, Git 状态显示您检查到 C 的更改 。 您没有丢失任何东西 !
备选方案3: git 重设 -- 软
对于最轻的触摸,你甚至可以撤销你的承诺,但留下你的文件和索引:
git reset --soft HEAD~1
这不仅留下您的文件, 甚至留下您的索引 。 当您做 Git 状态时, 您就会看到相同的文件在索引中 。 事实上, 在此命令之后, 您就可以做 Git 承诺, 您就会重做您刚刚做的同样的事情 。
选项 4: 您确实重置了 git -- hard 重置, 并且需要将代码调回
还有一件事:假设你像第一个例子一样摧毁一个承诺,但发现你毕竟需要它?运气不好,对吧?
不,还有办法把它拿回来,按这个键
git reflog
你将看见一份你所迁入的沙子(部分),你将看见它。你应当发现你所破坏的,你应当做这件事:
git checkout -b someNewBranchName shaYouDestroyed
承诺在Git不会在90天内被摧毁 所以你通常可以回去 拯救一个你本不想除掉的人
使用此命令 :
git checkout -b old-state number_commit
$ git commit -m 'Initial commit'
$ git add forgotten_file
$ git commit --amend
重要的是要明白,当你正在修正你的最后一项承诺时,你并没有完全用新的、更好的承诺来取代它,新的承诺将旧承诺推开,而将新承诺置于其位置。 事实上,这好像前一项承诺从未发生,也不会出现在你的存储库历史中。
修改承诺的明显价值是略微改进你的最后一项承诺,而不会用表格“Oops,忘记添加文件”或“Darn,在最后一项承诺中确定打字符”等字词来模糊你的存储库历史。
2.4 Git Basics - 撤销事情
我想撤销我们共享存储库中最新的五个承诺。 我查了我想回溯到的订正代号 。 然后我输入了下面的内容 。
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>