3

我有三个分支:master、task_one 和 task_two。我想提取其他人所做的所有更新,并将这些更新应用到我的所有工作中。

正确的命令是什么?

4

2 回答 2

3

由于潜在的合并冲突,没有自动“更新所有内容”的好方法。因为这意味着没有简单的“始终保持最新”的好方法,所以下一个要回答的问题是:为什么需要更新?

如果您需要他们进行代码审查,那么

git remote update

其次是

git log refs/remotes/<remote-name>/<branch-name>

将让您检查其他人发送的提交。

如果您想将它们与您所做的更改集成(您提到变基),那么您只需要在实际对分支进行工作之前进行更改。所以,一旦你检查了你想要处理的分支(并且假设你现在已经准备好集成更改——不要无缘无故地集成!当你准备好时集成!

git pull --rebase <remote-name> <remote-branch-name>

将从 <remote-name> 获取 <branch-name>,然后对其进行 rebase。它实际上是(并且等同于)运行的快捷方式:

git fetch <remote-name> <remote-branch-name> &&
git rebase <remote-branch-name>

您还可以为任何给定分支设置默认的上游远程/分支,这将允许您简单地键入

git pull --rebase

在将来。这对于运行时间较长的主题很有用。要设置默认值,请使用:

git branch --set-upstream <local-branch-name> <remote-name>/<remote-branch-name>

总而言之,就是:

  • git checkout <分支>
  • git pull --rebase <远程名称> <远程分支名称>

对于您要更新的每个分支,需要注意的是,我通常建议不要简单地遍历每个分支,直到您真正准备好对其进行工作。

如果“master”正在积极开发中,“remote-master”正在积极开发中(并且应该rebase-to),而“task_one”和“task_two”是基于“master”,而不是直接基于“remote-master” ”,只从“master”而不是任何任务分支中提取 --rebase 可能是有意义的,而是将它们重新设置在 master 之上。例如:

  • git结账大师
  • git pull --rebase <remote> master
  • git checkout <任务分支>
  • git rebase 大师

虽然真的, git pull --rebase <remote> master 与偶尔的 git rebase master 混合在一起,很可能“做正确的事”,具体取决于您历史的复杂性。不要依赖它,但要意识到这种可能性。了解“git patch-id”和“git rebase”如何交互,以及“git rebase”如何在您的工作流程基于该简化之前进行合并,但取决于您的工作流程,这可以为您节省几个步骤。

于 2012-09-12T20:52:38.573 回答
1

I would create a new local branch "merge_work" from master: git checkout -b merge_work

Then merge task_one: git merge task_one

I would then fix any conflicts then merge task_two git merge task_two again fix the conflicts.

Once that is all done move to master git checkout master

The merge merge_work: git merge merge_work

Note: This assumes all your branches are already local.

于 2012-09-12T20:31:42.073 回答