这是我的git设置(我们在公司网络中使用Git + Atlassian Stash):

upstream:
  master

origin (my fork of 'upstream'):
  master
  branch1 (branch of master, with a few commits on top of it)

clone (local; clone of 'origin'):
  master
  branch1 (ahead of 'origin:branch1' by 1 commit)

我想做的事:

我想 merge upstream:master -> clone:branch1。我知道此 merge 会有冲突(因为我更改了branch1中的文件,而其他文件已在上游更改)。完成此操作后,我希望将更改推回origin:branch1,其中将包括上游的1 commit +最新库(我想保持master分支的最新状态,因为这是我从中分支出来的)。与此同时,我希望它成为一个 rebase ,以便提交历史记录是干净的,并且不会在所有地方产生蜘蛛网。

另一个注意事项是,我不直接使用git命令行。在Windows上,我使用的是SmartGit,因此,如果有人知道该工具的说明,那将是最理想的。

我如何像上面描述的那样正确 merge ?

最佳答案

如果没有其他人克隆或正在使用branch1,则在将母版更新为上游/母版之后,可以在母版顶部 rebase

  • 首先,fetch upstream (SmartGit:远程/pull ,选择“仅获取”)
  • 然后将master重置为upstream/master(SmartGit:本地/重置)
  • 现在将branch1重新设置为主节点(SmartGit:在Branches View 中,您可以右键单击像master这样的分支,然后选择Rebase HEAD将当前的HEAD重新设置到所选分支master上)
    Resolve merge conflicts(如有必要)。
  • 最后将branch1推送(强制推送)到origin(SmartGit:在Branches View 的上下文菜单中,您可以在本地分支上调用PushPush To)。
  • 10-08 07:28