我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。

我如何从当地存储库撤销这些承诺?


当前回答

如何撤销最后的 Git 承诺 ?

为了让一切恢复到上次承诺之前的状态 我们需要重置在总部总部之前的承诺

如果您不想保留您所做的更改: git 重置 -- hard HEAD * 如果您想要保留您的更改: git 重置 -- s软 HEAD*

现在检查您的 git 日志。 它会显示我们上次的承诺已被删除 。

其他回答

我很久以前也曾写过这些话,

如何删除/ 反转 Git 承诺

基本上,你只需要做:

git 日志, 获取 SHA hash 的前七个字符, 然后进行 git return < sha> , 然后再进行 git push -- force 。

您也可以使用 Git 返回命令, 恢复此命令如下: git 返回 < sha> - m - 1, 然后按 git 键 。

在我的情况中,我承诺并推向错误的分支, 所以我想要的是把全部的改变都收回来, 这样我就可以把它们投向一个新的正确的分支, 所以我做了这个:

在您承诺和推动的同一分支上, 如果您输入“ gitt status” 键入“ git status” 状态, 您将不会看到任何新事物, 因为您承诺和推动, 现在键入 :

    git reset --soft HEAD~1

这将将您所有的更改( 文件) 重新回到舞台区域, 现在把它们重新回到工作目录( 非阶段) 中, 您只要输入 :

git reset FILE

“ 文件” 是您想要再次承诺的文件 。 现在, FILE 应该在工作目录中, 包含您所做的全部更改 。 现在您可以更改为您想要的分支, 并对该分支进行更改 。 当然, 您承诺的初始分支仍然有所有更改, 但对于我来说, 如果不是您的话, 您可以寻找恢复该分支承诺的方法 。

如何使用,重置 -- 软的或重置 -- 硬的?

@Kyralessa的回答:

如果您不确定该使用什么 -- Soft (我用这个公约来记住它 -- 安全性 -- 软性) 。

为什么?

如果您选择 -- 错误地选择 -- 错误地选择, 您将会失去以前没有的更改。 如果您选择 -- 错误地选择 -- 错误地选择 -- 软, 您可以通过应用额外命令而实现同样的结果 -- 硬

git reset HEAD file.html
git checkout -- file.html

完整示例

echo "some changes..." > file.html
git add file.html
git commit -m "wrong commit"

# I need to reset
git reset --hard HEAD~1 (cancel changes)
# OR
git reset --soft HEAD~1 # Back to staging
git reset HEAD file.html # back to working directory
git checkout -- file.html # cancel changes

感谢@Kyralessa。

撤销一项承诺是有点吓人,如果你不知道它是如何运作的。 但如果你理解的话,它其实很容易。我会告诉你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天内被摧毁 所以你通常可以回去 拯救一个你本不想除掉的人

我从Bitbucket拿到了身份证明 然后就做了:

git checkout commitID .

示例:

git checkout 7991072 .

它又把它恢复到那个承诺的工作副本上。