如何在Git的另一个分支上“覆盖”而不是“合并”分支?
我有两个分支, email
和staging
。 staging
是最新的,我不再需要在email
分支旧的更改,但我不想删除它们。
所以我只是想把所有的staging
内容staging
到email
以便它们都指向相同的提交。 那可能吗?
您可以使用“我们”的合并策略:
$ 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
笔记:
-
通过上述命令,旧的QAbranch已经更新到新的开发者
-
最后一次推送的自动评论如下:
将分支“QAbranch”合并到dev中,
这个评论看起来相反,因为上面的顺序也看起来相反
序列2:
git checkout dev
现在给
切换到分支“开发”
你的分支在15次提交之前领先于“origin / dev”。
(使用“git push”发布你的本地提交)
以上是意想不到的(新的本地提交dev是不必要的)
所以,我们需要扔掉,并使开发不变。
序列3:
git reset --hard origin/dev
- 现在检查:
序列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