撤消 git pull,如何将 repos 恢复到旧状态(再次)

Undo git pull, how to bring repos to old state (once again)

请注意,在将问题表示为重复之前,我已经阅读了答案here但是,根据建议的解决方案,我将删除所有未提交的内容变化。

问题:

我使用专用分支开发了新功能。与此同时,master 分支继续由其他人开发。我决定做一个 git pull 以便将我的代码重新设置为新代码。但是,存在冲突:有人改进了远程仓库上的代码。

问题:

  1. 我的本地存储库中有一些未提交的更改。我怎样才能使回购协议恢复到旧的未提交更改的旧状态?
  2. 我是否已经永远失去了所有未提交的更改?

所以你有以下情况:

  1. 您在当地有一家分店
  2. 您正在这个分支上工作,这意味着您在工作文件夹中有未提交的更改
  3. 您在本地分支上有提交,但您尚未推送
  4. 其他人在此分支上进行了提交,他们已推送(这意味着您的本地分支已过时)
  5. 您做了一个 git pull 尝试将来自上游的提交与本地提交合并,但失败并给您留下了合并冲突
  6. 您现在有一个工作文件夹,其中包含您尚未提交的更改以及来自失败合并的合并冲突更改

事实是,如果第 5 步最终会触及您在本地更改但尚未提交的文件,则永远不会尝试合并。让我重写一下,因为 git pull 尝试合并,它尝试合并的提交的更改不涉及您未提交更改的文件。

所以你所要做的就是:

  1. 对您的工作文件夹和存储库进行完整备份,并在副本上进行实验(我不想负责添加更多问题)
  2. 执行这条命令:

    git merge --abort
    

这会将您的分支恢复到之前的状态,包括工作文件夹。您在 git pull 之前未提交更改的任何文件都应保持原样,因为无论如何合并都不会涉及它们。

如果在进行了本地修改后变基确实开始了,很可能是您打开了 "autostash" 选项。

否则,变基根本就不会开始。

检查此配置参数的值:

git config --get rebase.autostash

你应该看到 true


您可以运行 git rebase --abort取消变基。

您应该看到一行:

Applied autostash.

这表示您未暂存的更改已恢复。