首页 文章

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

提问于
浏览
783

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

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

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

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

9 回答

  • 86

    它首先使用: git reflog

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

    git reset --hard HEAD@{1}
    
  • 251

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

  • 37

    git pull 将执行两项操作:它执行 git fetch 然后执行 git merge ,它将合并已设置为在您的配置中合并的分支 .

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

    为此,您可以尝试使用 git reset --hard 重置为以前的状态 . 使用git-reflog命令查找先前状态的SHA-1,然后重置为该状态 .

    Warninggit reset --hard 删除所有未提交的更改 .

  • 24

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

    git reset --hard a0d3fe6
    

    通过这样做找到a0d3fe6

    git reflog
    

    并查看要撤消的点 .

  • 0

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

    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 --abortso they are not only old and new syntax for the same thing 撤消 . 这就是为什么我发现 git reset --merge 在日常工作中更有用 .

  • 4

    假设 $COMMIT 是您执行 git pull 之前的最后一次提交ID . 你需要撤消最后一次拉动是什么

    git reset --hard $ COMMIT

    .

    奖金:

    在谈到拉动时,我想分享一个有趣的技巧,

    git pull --rebase

    上面的命令是我git生活中最有用的命令,节省了大量的时间 .

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

    在以下位置查找详细信息:http://gitolite.com/git-pull--rebase

  • 10

    你可以做 git reset --hard ORIG_HEAD

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

  • 41

    这是恢复拉动变化的最简单方法 .

    git reset --hard 9573e3e0
    

    9573e3e0 是您的{提交ID}

  • 1094

    如果有一个失败的合并,这对于想撤消 git pull 的最常见原因,运行 git reset --merge 确实人们所期望的正是:守取文件,但撤消 git pull 试图合并的合并 . 然后,人们可以决定做什么,而不会产生 git merge 有时产生的混乱 . 并且它不需要找到 --hard 在其他答案中提到的确切提交ID .

相关问题