如何在Git的另一个分支上“覆盖”而不是“合并”分支?

我有两个分支, emailstagingstaging是最新的,我不再需要在email分支旧的更改,但我不想删除它们。

所以我只是想把所有的staging内容stagingemail以便它们都指向相同的提交。 那可能吗?

您可以使用“我们”的合并策略:

 $ git checkout staging $ git merge -s ours email # Merge branches, but use our branch head 

如果您只想让两个分行的“电子邮件”和“分期”相同,您可以标记“电子邮件”分行,然后将“电子邮件”分行重置为“分期”行:

 $ git checkout email $ git tag old-email-branch $ git reset --hard staging 

您也可以重新绑定“电子邮件”分支上的“分期”分支。 但结果将包含两个分支的修改。

其他答案给了我正确的线索,但他们并没有完全帮助。

以下是对我有用的东西:

 $ git checkout email $ git tag old-email-branch # This is optional $ git reset --hard staging $ $ # Using a custom commit message for the merge below $ git merge -m 'Merge -s our where _ours_ is the branch staging' -s ours origin/email $ git push origin email 

没有与我们的战略合并的第四步,推送被认为是一个非快速更新,将被拒绝(由GitHub)。

我已经看到了几个答案,这是唯一的程序,让我解决这个没有任何冲突。

如果您需要branch_old中的branch_new的所有更改,则:

 git checkout branch_new git merge -s ours branch_old git checkout branch_old git merge branch_new 

一旦应用了这四个命令,您就可以毫无问题地推送branch_old

如果你像我一样,你不想处理合并,你可以执行上述步骤,除了使用强制而不是合并,因为它会创build一个令人分心的日志文件轨迹:

 git checkout email git reset --hard staging git push origin email --force 

注意:这只有当你真的不想再看到电子邮件的东西。

怎么样:

 git branch -D email git checkout staging git checkout -b email git push origin email --force-with-lease 

我想合并两个分支,以便old_branch中的所有内容都用old_branch的内容进行更新

对我来说,这工作就像一个魅力!

 $ git checkout new_branch $ git merge -m 'merge message' -s ours origin/old_branch $ git checkout old_branch $ git merge new_branch $ git push origin old_branch 

其他答案看起来不完整
有点紧张,我已经尝试了下面,它运作良好。

细节:
1. QAbranch就是dev的同一个拷贝
2.所有的开发发生在dev
3.有时候,dev代码需要被移动/覆盖到qa分支

所以我们需要从dev分支覆盖qa分支

序列1:

 git checkout dev git merge -s ours QAbranch git checkout QAbranch git merge dev git push 

笔记:

  1. 通过上述命令,旧的QAbranch已经更新到新的开发者

  2. 最后一次推送的自动评论如下:

将分支“QAbranch”合并到dev中,
这个评论看起来相反,因为上面的顺序也看起来相反

序列2:

 git checkout dev 

现在给

切换到分支“开发”
你的分支在15次提交之前领先于“origin / dev”。
(使用“git push”发布你的本地提交)

以上是意想不到的(新的本地提交dev是不必要的)
所以,我们需要扔掉,并使开发不变。

序列3:

 git reset --hard origin/dev 
  1. 现在检查:

序列4:

 git status 

在分支开发
您的分支与“origin / dev”保持一致。
没有提交,工作树干净

现在都好:
1.旧的QAbranch现在被新的开发分支代码所覆盖
2.本地是干净的(远程原点/ dev是不变的)

 git checkout email git merge -m "Making email same as staging disregarding any conflicts from email in the process" -s recursive -X theirs staging