【问题标题】:Undoing a git pull --rebase撤消 git pull --rebase
【发布时间】:2011-01-13 20:51:46
【问题描述】:

嘿,我是 git 新手,我需要撤消拉动,有人可以帮忙吗?!?所以我所做的是......

  1. git 提交
  2. git 存储
  3. git pull --rebase
  4. git stash pop

这造成了一堆冲突并且出了点问题。现在做 'git stash list' 显示我的存储仍然在那里。是否可以在执行 git commit 之后将我的 repo 恢复到原点。如此有效地,我的 repo 只包含我所做的更改,并且没有来自服务器的任何新内容?

【问题讨论】:

    标签: git git-rebase git-pull git-stash git-revert


    【解决方案1】:

    实际上,为了使这更容易,Git 保留了一个名为 ORIG_HEAD 的引用,它指向你在变基之前所在的位置。所以,很简单:

    git reset --hard ORIG_HEAD
    

    【讨论】:

    • 我几乎失去了一周的工作价值,但这让它复活了。这就是当其他人重新调整您的分支并强制推送到原点而不先拉动您的更改时发生的情况......这绝对重要的是要知道您是否与其他人一起从事任何项目,他们强迫每个人都进行重新调整而不是合并。搞一个更干净的历史,变基是危险的。
    • 这是我需要的答案。
    • 这比使用 reflog 接受的答案要好得多。
    • 这个答案增加了一些细节:stackoverflow.com/a/10907222/5124002
    【解决方案2】:

    使用git reflog,您将看到 HEAD 过去指向的提交列表

    使用

    git checkout -b after-commit HEAD@{1} # or the commit you want to recover
    

    您在该精确位置创建一个新分支并检查它

    【讨论】:

    • 这样做会引发错误,通知我文件将被合并覆盖。有没有办法忽略这个?
    • 确保你的工作目录是干净的(git reset --hard HEAD 会这样做)。另外,确保变基不再进行(git rebase --abort)。
    • 你我的朋友是救命稻草!谢谢你:)
    • 去过那里,做到了!我想我已经做了所有你可以用 git 做的傻事。 Git 是一把没有防护装置的锯子,可以很容易地切断你自己的手臂。但它还带有一个简单的手臂重新连接套件,如果需要,您甚至可以将手臂连接到膝盖上。
    • 你可以结合 checkout 和 reset 命令,只需要git reset --hard HEAD@{1}
    【解决方案3】:

    你应该检查命令

    git reset --merge
    

    这消除了对 git commit 的需要;拉之前 git stash (虽然不知道变基)

    该命令返回一个工作区,其中包含对冲突拉取之前状态的未提交更改。

    【讨论】:

      【解决方案4】:

      使用git log -g 并找到您要返回的提交索引,只需执行git checkout 索引

      【讨论】:

      • 这实际上没有帮助,因为pull --rebase 在你刚刚拉取的内容之上回放你的提交;在这种情况下,您不能只签出您的旧提交,因为它位于您刚刚提取的提交之上。
      猜你喜欢
      • 2012-06-10
      • 2014-10-01
      • 1970-01-01
      • 2017-11-08
      • 2011-08-14
      • 2021-11-17
      相关资源
      最近更新 更多