协慌网

登录 贡献 社区

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

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

编辑我想撤消 git merge 以澄清。看到一些答案后,我就这样做了

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

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

答案

git pull会做两件事:它会执行git fetch ,然后执行git merge ,它会合并已设置为在配置中合并的分支。

所以你想要做的是撤消合并(撤消 fetch 并没有多大意义,也不是必要的)。

要做到这一点,你可以尝试使用git reset --hard重置为以前的状态。使用git-reflog命令查找先前状态的 SHA-1,然后重置为该状态。

警告git reset --hard删除所有未提交的更改。

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

git reset --hard a0d3fe6

通过这样做找到 a0d3fe6

git reflog

并查看要撤消的点。

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

git merge --abort

而稍微老一点的方式:

git reset --merge

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

git reset --hard

但实际上,值得注意的是git merge --abort只相当于git reset --merge因为存在MERGE_HEAD 。这可以在 git help for merge 命令中读取。

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在日常工作中更有用。