更新本地主分支与远程主分支同步

35

我有一个分支想要合并到最新的远程master。我的电脑上有一个过时的本地master。我运行了git pull upstream master,然后它检索到了远程的master,这很好,正是我想要的。但是,在切换到另一个分支时,我不小心丢弃了更改。

在我的本地master上,我已经多次运行git pullgit pull upstream master了,每次都提示“Already up to date”,但它明显不是最新的。起初git pull upstream master运行得很好,但现在却失效了,机器认为它是最新的,但实际上并不是。我该如何使我的本地master再次与远程一致?


你是怎么意外修改了主分支的?据我所知,git pull 做了两件事情:1. 拉取远程代码和 2. 合并到本地分支。切换到另一个分支然后再回到 master 不应该对主分支造成任何改变。你能否在模拟仓库中重现这些步骤并发布命令? - urban
4个回答

64

通常情况下,当我本地的主分支过时并且想要将最近的更改合并到主分支(例如,my_branch),无论是本地还是远程,我都会执行以下操作:

  • 检出本地的 master 分支。
  • 运行 git pull --rebase origin master (这会将本地的主分支更新为最新更改)
  • 检出本地分支,例如 my_branch
  • 运行 git pull --rebase origin master (这将根据远程上最新的主干更新您的本地分支。您可能需要在此解决冲突(如果有))
  • 再次检出本地的 master 分支。
  • 运行 git merge my_branch
  • 运行 git push origin master

4
已经执行了 "git pull --rebase origin master",非常感谢。 - jjjjjjjj
你仍需要按照@Gianni Carlo在下面的答案中所写的运行git reset --hard upstream/master - M Y

21
如果您已经执行了 git fetch upstream,则可以在您的主分支上尝试执行以下操作:
 git reset --hard upstream/master

这将使您当前的分支与上游主分支完全相同(它会放弃任何本地更改,顺便检查您的最后一次提交以确认您在本地拥有最新版本)。


这个命令需要极其小心地执行,因为它会导致本地文件的更改丢失(如果有的话)。建议按照另一个答案中提到的逐步变基(https://dev59.com/7loV5IYBdhLWcg3wN8jh#36542146)进行操作 :) - vsr
2
我认为不是,因为在这种特定情况下,OP想要他的本地主分支与远程主分支完全相同。由于OP不关心本地更改,因此在这种情况下重新设置可能会很繁琐。但是我同意,如果您不想丢失本地更改,则不应使用此命令。 - Gianni Carlo
1
你可能想使用 git reset --hard origin/master 替代。 - Ben Liyanage

2

以下方法对我非常有效

  1. git checkout master
  2. git pull
  3. git checkout <你的本地分支>
  4. git pull --rebase --autostash origin master

0

请按照以下步骤 ->

git checkout master
git stash
git reset --hard origin/master
git pull -r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接