【问题标题】:Overwriting my local branch with remote branch [duplicate]用远程分支覆盖我的本地分支[重复]
【发布时间】:2011-09-07 22:56:44
【问题描述】:

我已经完全搞定了我的本地分支机构,并想重新开始。服务器上的版本是正确的。

我不想重新开始,我想用我的本地历史来修复我的巨大错误。 (如果需要,我可以。)

git fetch branchnamegit pull branchname 不起作用。我收到的消息是“最新”但是,我的本地版本与服务器的不匹配。

git pull origin/branchname 给我一个“not found”错误。

【问题讨论】:

    标签: git


    【解决方案1】:
    git reset --hard
    

    这是为了将您的所有本地更改还原到原始头

    【讨论】:

      【解决方案2】:

      首先,在当前位置创建一个新分支(以防您需要旧的“搞砸”历史):

      git branch fubar-pin
      

      更新您的远程分支列表并同步新提交:

      git fetch --all
      

      然后,将您的分支重置为 origin/branch 指向的点:

      git reset --hard origin/branch
      

      小心,这将从您的工作树中删除所有更改!

      【讨论】:

      • +1 但您可能需要在重置前添加提醒以执行git fetch origin
      • 我做了一个小小的改动,但没有成功:git fetch --all,git reset --hard SHA1OFANOLDCOMMIT,(其他一些东西),git reset --hard origin/branch。最终结果是我仍然处于旧的提交状态。因此,这种方法在某些情况下可能有效,但我认为它并不完全有效。
      • @greggles:有什么错误吗?在最后一条命令之后,HEAD 必须指向原点/分支。
      • @Gavin:不,这在任何情况下都不会影响origin/branch以外的其他分支。从不。
      • @greggles 我知道这非常晚了,但是对于想知道为什么会发生这种情况的其他人来说,这种方法只有在您签出分支时才有效。它对您不起作用,因为您在detached HEAD state,(HEAD 指向提交,而不是分支)并且这些命令仅在 HEAD 指向分支时才有效。当您在 HEAD 指向一个分支时执行 git reset 时,该分支将跟随。
      【解决方案3】:

      当我弄乱我的本地分支时,我要做的就是重命名我损坏的分支,然后再次签出/分支上游分支:

      git branch -m branch branch-old
      git fetch remote
      git checkout -b branch remote/branch
      

      然后,如果您确定不需要旧分支中的任何内容,请将其删除:

      git branch -D branch-old
      

      但通常我会把旧分支留在当地,以防万一我在那里有东西。

      【讨论】:

      • 这似乎是最好的答案。它有助于创建备份副本以防万一,并且似乎很可能导致本地分支成为远程分支的精确副本。
      • 很好的答案,对我有用。一问:官方 git-checkout 文档似乎说您的第三条命令应该是:git checkout -b <branch> --track <remote>/<branch> 如果没有 --track,您的命令是否同样有效?
      • 我认为配置变量 branch.autoSetupMerge(我认为默认为 true)使 --track 隐含。而且,是的,在我所有的 git 设置中,当我执行 checkout -b 时,我不需要显式地 --track,但是 YMMV。
      【解决方案4】:

      您的本地分支可能有您想要丢弃的修改。为此,您需要使用 git reset 将分支头重置为您从上游 repo 分支分歧的最后一个位置。使用git branch -v 查找上游分支的sha1 id,并使用git reset SHA1ID 重置您的分支。然后你应该能够做一个git checkout 来丢弃它留在你的目录中的更改。

      注意:始终在备份的存储库上执行此操作。这样你就可以保证你自己它工作正常。或者,如果没有,您可以恢复到备份。

      【讨论】:

      • 这感觉它可能会工作,但考虑到“在其他地方复制你的工作,制作远程分支的新副本”方法的简单性和可靠性,我看不到如何这样更好。
      猜你喜欢
      • 2016-01-16
      • 1970-01-01
      • 2018-09-29
      • 2013-04-30
      • 2015-10-19
      • 1970-01-01
      • 2021-09-23
      • 2020-06-11
      • 2021-09-13
      相关资源
      最近更新 更多