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

33
我看到有两种做法:
  1. 用远程主分支的更改替换本地分支

  2. 按照 Gitlab 的工作流程创建一个合并请求,将主分支中的更改合并到我想要更新为主分支最新内容的分支中

这两种方法的优缺点是什么?我比较倾向于第一种方法。你们觉得呢?

我有点困惑你的问题-你的意思是要用远程主干的内容覆盖你本地的内容吗?还是你只是想将主干的更改合并到你当前的分支中?也许你需要查找一个变基操作? - DaveyDaveDave
2
是的,我想要将主分支的更改合并到我的当前分支中! - joesan
4个回答

92

简单的答案 - 还有许多更复杂的答案 - 就是进行合并,因此:

git checkout master
git pull
git checkout <your-branch>
git merge master

(这与您在选项2中描述的基本相同)

根据您的设置,您可能不需要执行所有这些步骤(但执行它们不会有任何损害)。我建议您阅读每个命令以找到最适合您的精确工作流程。

这将把来自主分支的更改合并到您的分支中,并可能创建一个新的提交,其中包含一个注释,说明这是一次合并。

另一种选择,稍微高级一些的选项是使用rebase而不是merge,这将有效地将时间倒回到您的分支从主分支分叉的那一点,然后将主分支上的更改拉入,使您的分支与主分支保持一致,但不包括您的提交,并最终在末尾应用您的提交。这样做的好处是可以保持历史记录更简单 - 您只会得到一条直线变化记录,其中包括来自您的分支的更改在末尾,而不是两个在合并点汇合的分支。

要执行此操作,您需要执行以下操作:

git checkout <your-branch>
git rebase master

我建议你阅读关于rebase的文档,因为有许多情况下它会变得复杂,如果你是git的新手,一定选择合并,但当你更加自信时请回来使用rebase - 它是一个非常强大的功能,并且更像你在选项1中描述的内容。


8
如果您的remote设置为默认值origin,(可以通过使用git remote -v进行检查),那么您只需执行以下操作:
git merge origin master

1
我总是忘记这个 - 你需要先获取/拉取吗?如果是这样,将其添加到答案中以提醒其他用户会很好。 - coatesap
1
@coatesap,你可以直接使用git pull命令,以免忘记先执行git fetch。git fetch + git merge = git pull。但是不要忘记先暂存(或提交)所有本地更改,否则在合并后会丢失它们。 - SmartWaddles

5

当你在当前分支时,执行git merge master


请注意,为了正确运行此操作,本地主分支需要与远程主分支保持同步。在运行“git merge master”之前,请使用DaveyDaveDave的命令确保这一点。 - Tim Skov Jacobsen

2

You can rebase also:

git rebase origin/master

4
假设已经先运行了 git fetch,是吗?否则 origin/master 可能不包含来自远程主分支(origin master)的最新更改。 - Tim Skov Jacobsen
@TimSkovJacobsen 是的 - Renil Babu

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