有没有办法恢复或撤销git拉,使我的源/回购将回到做git拉之前的旧状态?
我想这样做是因为它合并了一些我不想这样做的文件,但只合并了其他剩余的文件。我想拿回那些文件,可以吗?
编辑:我想撤销git合并澄清。
看到一些答案后,我这样做了
git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
现在,我该怎么办?做git重置——难吗?我不想再搞砸了,所以问详细步骤?
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 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 pull命令的当前分支中的日志
git log
示例输出如下所示
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxa3dd0
Author: user <user@gmail.com>
Date: Tue Nov 23 20:19:58 2021 +0530
latest changes
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxd697b
Author: user <user@gmail.com>
Date: Tue Nov 23 17:45:44 2021 +0530
latest changes includes account details api
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa
Author: user <user@gmail.com>
Date: Tue Nov 23 17:02:39 2021 +0530
latest changes
复制您想要的最后一个提交id。例如,如果你的最后一个提交id是xxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa(假设这个提交id是你执行git pull之前的最后一个提交id),并且在这个提交id以上的两次提交是在你的git pull命令之后进行的,那么使用这个提交id来获得之前的更改
git reset --hard xxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa
这样做将删除该提交id之上的提交。在此之后,您将获得之前的更改,就像这样简单。
一个更现代的撤销合并的方法是:
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在日常工作中更有用。