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

编辑:我想撤销git合并澄清。 看到一些答案后,我这样做了

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...

现在,我该怎么办?做git重置——难吗?我不想再搞砸了,所以问详细步骤?


当前回答

一个更现代的撤销合并的方法是:

git merge --abort

还有一种稍显古老的方式:

git reset --merge

在前面的回答中描述的老派方法(警告:将丢弃所有的本地更改):

git reset --hard

但实际上,值得注意的是,git merge——abort只相当于git reset——merge,前提是存在MERGE_HEAD。这可以在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重置——hard ORIG_HEAD

因为“pull”或“merge”在执行这些操作之前将ORIG_HEAD设置为当前状态。

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

git reset --hard a0d3fe6

a0d3fe6是怎么找到的

git reflog

看看你想要撤销的点。

git reflog 这将生成一个如下所示的列表:

2cae310 (HEAD -> ArunJan, origin/ArunJan) HEAD@{0}: checkout:从a590c01f5c2b83adcb36049f3fd590a3244fa745移动到ArunJan a590c01 HEAD@{1}: checkout:从ArunJan移动到a590c01 2cae310 (HEAD -> ArunJan, origin/ArunJan) HEAD@{2}:重置:移动到HEAD 2cae310 (HEAD -> ArunJan, origin/ArunJan) HEAD@{3}:结帐:从4a41a0fa05b98b274f1477991c6a25313f38b1b2移动到ArunJan 4a41a0f HEAD@{4}:结帐:从ArunJan移动到4a41a0fa05b98b274f1477991c6a25313f38b1b2 2cae310 (HEAD -> ArunJan, origin/ArunJan) HEAD@{5}: reset:移动到2cae31078cdf1c8abac9068330b2ccdd3fc424e3 f830534 HEAD@{6}: pull origin ArunJan:由'ort'策略合并。 a590c01 HEAD@{7}:提交:项目创建任务 4a41a0f HEAD@{8}:提交:创建新项目 b6cb3c5 HEAD@{9}: checkout:从b6cb3c5e82aea4c64ab2a1f0c37e53695d21f194移动到ArunJan b6cb3c5 HEAD@{10}: checkout:从dev-server移动到b6cb3c5e82aea4c64ab2a1f0c37e53695d21f194 5eeaf3c (dev-server) HEAD@{11}: revert:恢复“项目创建并复制URL”

选择要恢复到的版本。例如,如果我想恢复到“项目创建任务”,我会选择ID b0168ee。接下来,运行以下命令将存储库恢复到该版本:

Git复位——硬a590c01

要将最后的合并恢复到自定义分支,最简单的方法是:

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

主分支示例:

git reset --hard main@{1}

它的工作原理 首次使用:git reflog

找到你之前状态的SHA并make(以HEAD@{1}为例)

git reset --hard HEAD@{1}