Git重置为上一次提交

Git重置为上一次提交,git,Git,我有三次提交,我试图清理一些代码。无论如何,我设法彻底摧毁了我正在做的工作。我想删除过去的三次提交并返回到一个特定的提交SHA1 如何恢复到以前的提交并删除这3次提交的历史记录?(历史删除部分不是什么大问题)。这些提交已经被推送了,所以我有点不知所措 谢谢 由于您的提交是远程推送的,因此需要删除它们。我假设您的分支是master,它被推到origin上 您首先需要从源代码中删除主代码: git推送原点:master(注意冒号) 然后您需要将master设置为您想要的状态,我假设提交散列为ABCD

我有三次提交,我试图清理一些代码。无论如何,我设法彻底摧毁了我正在做的工作。我想删除过去的三次提交并返回到一个特定的提交SHA1

如何恢复到以前的提交并删除这3次提交的历史记录?(历史删除部分不是什么大问题)。这些提交已经被推送了,所以我有点不知所措


谢谢

由于您的提交是远程推送的,因此需要删除它们。我假设您的分支是
master
,它被推到
origin

您首先需要从源代码中删除主代码:

git推送原点:master
(注意冒号)

然后您需要将
master
设置为您想要的状态,我假设提交散列为
ABCDE

git重置——硬ABCDE

最后,再次按下
master

git推送原始主机


就这样!请注意,如果有人已经从
origin
下载了您的更改,这将极大地影响他们,使他们的本地repo不稳定。

git的一般思想是,您永远不会删除提交。你只需要留下他们的名字。既未命名也未被其他命名提交引用的提交最终会自行消失

例如,假设您从以下内容开始:

$ git checkout my_work_branch
<do some editing>
$ git commit -m "attempt #1, so far so good"
<do more editing>
$ git commit -m "attempt #2, getting a little hazier"
<do more editing>
$ git commit -m "attempt #3, looking bleak now"
您现在看到的是名为
my_work\u branch
(您之前给出的名称)“指向”提交d97de0e,这又指向9a3efe3,它指向9e80936,它指向a1d6424。(这也是特殊名称HEAD指向的位置。)

您可以使用任何旧的
git checkout
将头部移动到其他位置。但是,问题是:您也可以将名称
my_work\u branch
移动到a1d6424:

$ git reset --hard a1d6424

如果执行此操作,您会发现名称
my_work\u branch
也已移动:

$ git rev-parse my_work_branch
a1d6424e5afcda475910084720c9aa26e3528618
您添加的提交仍然存在:

$ git log d97de0e
将向您展示:

$ git log --graph --decorate --pretty=oneline --abbrev-commit d79de0e
* d97de0e attempt #3, looking bleak now
* 9a3efe3 attempt #2, getting a little hazier
* 9e80936 attempt #1, so far so good
* a1d6424 (HEAD, my_work_branch) here's where you started
只是它们不再有任何名称,如果您做一些工作并
git-add
git-commit
它,就会出现在名为
my\u-work\u-branch
的新分支上。旧的一个有三个额外提交,现在是一个“垃圾”分支。(如果你决定,尽管你希望他们回来,但你只需要在他们大约3个月后到期之前给他们一个名字。你必须找到或记住这个数字,上面例子中的d97de0e。)
更新:啊,你已经推送了他们,你希望他们从远程存储库中消失


您不必删除远程分支。在完成上面的倒带(
git reset--hard
)之后,可以使用
git push-f
。请记住,任何其他获取您的推送更改的人都拥有这些更改,并且将继续拥有它们,并且很容易被它们的存在所迷惑。您必须提醒任何此类人员注意您的“已撤销”提交。

查找要重置为的提交:

git log
获得哈希后:

git reset --hard <hash>
git重置——硬
并按下遥控器:

git push -f <remote> <branch>
git推送-f
使用git revert

--您可以恢复到一个、两个或多个提交范围

--它还将删除提交历史记录

1) 吉特175a25

2) git状态/git日志(确认您已还原)


3) git push

例如,如果您想摆脱最后两次提交,可以执行以下操作:

git log -3
commit 7e83c9fa5dc1a1914847bfccfe9d2da14f845070
Author: Jaime Montoya <webmaster@jaimemontoya.com>
Date:   Fri Sep 28 05:58:58 2018 -0600

    Add new background image to the header of the website.

commit b84b0c38df2f876d1c1f5657e6e452b5689c2d80
Author: Shannon Hall <s.hall@example.net>
Date:   Thu Sep 27 21:35:48 2018 -0400

    Include code for Google Maps.

commit 40e82f46c1d523cb07abb6abe9f8c64f2b4fe0f7
Author: Jaime Montoya <webmaster@jaimemontoya.com>
Date:   Thu Sep 27 18:57:45 2018 -0600

    Update links to copyright messages.
这是从本地存储库撤消提交的一种方法

在完成上述操作后,您可以使用
gitpush

确定推送到远程存储库,这里有两种解决方案。 对于任何一种解决方案,
git log
,并找到要返回的提交的哈希值

1) 通过自动创建修补程序撤消更改来恢复更改。 什么?自动创建反向补丁以撤消更改。提交并推送修补程序。您的原始更改仍在git日志中,但使用此反向补丁将其“撤消”

怎么做?
git revert[hash]和&git push

为什么?因为你是一个与其他优秀开发人员合作的优秀开发人员,不想破坏他们的本地回购协议

为什么不呢?因为以后很难“合并”您的更改。恢复补丁比您的更改“更新”,因此比“git merge”更难重新应用您的更改

2) 强制推送到上一个提交 什么?分支是指向提交的指针。将该指针硬重置为以前的提交,然后强制将该指针推送到服务器。您的更改(以及任何其他更改)将从git历史记录中删除

怎么做?git重置--hard[hash]和&git push-f

为什么?因为你是一个野牛仔/女牛仔,你所做的更改是在一个功能分支中,你希望继续工作,以便以后轻松合并


为什么不呢?您的重置和推送操作将打乱已经拉您更改的队友的任何本地回购(例如,失去提交,不得不重新提交工作)。如果您没有推送(或他们没有拉送),这不是问题。

您有3个本地提交,您想返回并永久删除它们吗?这些提交是远程推送的吗?是的,它们是远程推送的。这就是为什么我感到困惑。我希望他们永远消失。这通常不是一个好主意,如果你犯了错误,你可以删除你的同事犯的错误,当然,如果你一个人工作,这不应该是一个问题。。为了安全起见,最好只执行git还原,提交仍会存在,但代码不会有问题。可能的副本看起来很有用,所以我只是尝试了一下,但是我在git clone之后出现了这个错误git@github.com:dandv/reveal.js.git和
git推送原点:主节点
:>远程:错误:拒绝删除当前分支:refs/heads/master togit@github.com:dandv/reveal.js.git
git push -f <remote> <branch>
git log -3
commit 7e83c9fa5dc1a1914847bfccfe9d2da14f845070
Author: Jaime Montoya <webmaster@jaimemontoya.com>
Date:   Fri Sep 28 05:58:58 2018 -0600

    Add new background image to the header of the website.

commit b84b0c38df2f876d1c1f5657e6e452b5689c2d80
Author: Shannon Hall <s.hall@example.net>
Date:   Thu Sep 27 21:35:48 2018 -0400

    Include code for Google Maps.

commit 40e82f46c1d523cb07abb6abe9f8c64f2b4fe0f7
Author: Jaime Montoya <webmaster@jaimemontoya.com>
Date:   Thu Sep 27 18:57:45 2018 -0600

    Update links to copyright messages.
git reset --hard 40e82f46c1d523cb07abb6abe9f8c64f2b4fe0f7