撤消git拉,如何将repos带到旧状态

有没有办法恢复或撤消git拉取,以便我的源/repos将回到git拉取之前的旧状态?我想这样做是因为它合并了一些我不想这样做的文件,但只合并其他剩余的文件。所以,我想找回那些文件,这可能吗?

编辑:我想撤消git合并以进行澄清。看到一些答案后,我做了这个

git reflogbb3139b... HEAD@{0}: pull : Fast forward01b34fa... HEAD@{1}: clone: from ...name...

现在,我该怎么办?做git reset --hard可以吗?我不想再搞砸它,所以要求详细的步骤?

1486969 次浏览

运行git pull按顺序执行以下任务:

  1. git fetch
  2. git merge

合并步骤结合了已设置为在您的配置中合并的分支。您想撤消合并步骤,但可能不是获取(没有多大意义,也不应该是必要的)。

要撤消合并,请使用git reset --hard将本地存储库重置为以前的状态;使用git-reFlog找到前一个状态的SHA-1,然后重置为它。

警告

本节中列出的命令会删除所有未提交的更改,这可能会导致工作丢失:

git reset --hard

或者,重置到特定的时间点,例如:

git reset --hard master@{"10 minutes ago"}

如果您有gitk(尝试从您的git命令行运行“gitk--all”),它很简单。只需运行它,选择要回滚到的提交(右键单击),然后选择“将主分支重置到此处”。如果您没有未提交的更改,请选择“hard”选项。

与jkp的答案相同,但这是完整的命令:

git reset --hard a0d3fe6

其中a0d3fe6是通过做

git reflog

然后看着你想要撤消的点。

撤消合并的更现代的方法是:

git merge --abort

更古老的方式:

git reset --merge

以前的答案中描述的老派方式(警告:将放弃所有本地更改):

git reset --hard

但实际上,值得注意的是,在给定MERGE_HEAD的情况下,git merge --abort仅等效于git reset --merge。这可以在git帮助合并命令中读取。

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

失败的合并后,当没有MERGE_HEAD时,失败的合并可以用git reset --merge撤消,但不一定用git merge --abort所以它们不仅是同一事物的新旧语法撤消。这就是为什么我发现git reset --merge在日常工作中更有用。

你可以做git reset --hard ORIG_HEAD

因为“拉”或“合并”设置ORIG_HEAD在执行这些操作之前的当前状态。

假设$COMMIT是执行git pull之前的最后一个提交ID。您需要撤消最后一次拉的是

git reset --hard $COMMIT

.

奖金:

说到拉,我想分享一个有趣的技巧,

git pull --rebase

上面的命令是我git生活中最有用的命令,节省了很多时间。

在将您的新提交推送到服务器之前,请尝试此命令,它会自动同步最新的服务器更改(使用获取+合并),并将您的提交放在git日志的顶部。无需担心手动拉/合并。

查看详情:http://gitolite.com/git-pull--rebase

有用首次使用:git reflog

找到你的previus状态的SHA并制作(HEAD@{1}是一个例子)

git reset --hard HEAD@{1}

如果有一个失败的合并,这是想要撤消git pull的最常见原因,运行git reset --merge完全符合人们的期望:保留获取的文件,但撤消git pull试图合并的合并。然后,人们可以决定在没有git merge有时产生的混乱的情况下该怎么办。它不需要找到--hard在其他答案中提到的确切提交ID。

这是恢复拉取更改的最简单方法。

** Warning **

请备份您更改的文件,因为它会删除新创建的文件和文件夹

git reset --hard 9573e3e0

其中9573e3e0是你的{提交id}

git拉取做下面的操作。

一.git fetch

二.git merge

要撤消拉做任何操作:

i.git reset --hard---它也恢复所有本地更改

ii.git reset --hard master@{5.days.ago}(如10.minutes.ago1.hours.ago1.days.ago…)获取本地更改。

三.git reset --hard commitid

改进点:

下次使用git pull --rebase而不是git pull…它的同步服务器通过执行(获取和合并)进行更改。

试试跑

git reset --keep HEAD@{1}

我建议做的第一件事就是复制这个项目。

您可以签出一个新分支(git check out-b NewCopy),这样您就可以拥有一个副本,然后返回到您签出的分支。

运行此命令以查看git引用。

git reflog

它将显示您的参考日志和commit_Id{类似于e0371eb},您可以使用它返回到特定的参考点。

运行此命令回溯到一个点

git reset --hard 7316f34  //replace that with your commit id

我建议打开两个终端,一个显示日志,另一个运行命令

要将最后合并恢复为custom-branch,最简单的方法是:

git reset --hard custom-branch@{1}

main分支示例:

git reset --hard main@{1}

执行此操作以取消合并操作:git合并失败

查看current branch中执行git pull命令的日志

git log

示例输出将如下所示

commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxa3dd0Author: user <user@gmail.com>Date:   Tue Nov 23 20:19:58 2021 +0530
latest changes
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxd697bAuthor: user <user@gmail.com>Date:   Tue Nov 23 17:45:44 2021 +0530
latest changes includes account details api
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6faAuthor: user <user@gmail.com>Date:   Tue Nov 23 17:02:39 2021 +0530
latest changes

复制你想要的最后一个提交id.例如,如果你的最后一个提交id是xxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa(假设这个提交id是在你执行git拉之前的最后一个提交id),并且在你的git拉命令之后出现了两个高于这个提交id的提交,使用这个提交id来获取你以前的更改

git reset --hard xxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa

这样做将删除提交上面这个提交id.你会得到你以前的改变之后,就这么简单。