案例类似于:Git: Discard all changes on a diverged local branch。
的差异:
git push origin foo:foo --force
被拒绝(来源
不允许用力推动。给定提交图:
A--B--C--O1--O2--O3 (foo)
\
L1--L2--L3 (origin/foo)
如果可能,我想实现这个目标:
A--B--C--O1--O2--O3 (foo origin/foo)
如果以上是不可能的,那么下面对我来说没问题:
A--B--C--O1--O2--O3--M1 (foo)
\ /
L1--L2--L3 (origin/foo)
但我希望git diff M1..03
为空,即放弃origin/foo
中引入的所有更改。并且-s ours
策略没有帮助,因为这只适用于冲突,而且仍然会将非冲突的更改添加到M1
。
如何做到这一点?
删除远程分支并推送。 git
如果已跟踪(git branch -vv
),则应自动创建远程分支。
实现这一目标:
A--B--C--O1--O2--O3 (foo origin/foo)
\
L1--L2--L3
型:
git push origin --delete foo
git checkout foo # Git ≥ 1.6.6.
git push origin foo
答案 0 :(得分:5)
-s ours
策略确实有效。这是-X ours
“策略参数”不起作用(因为你给出的原因)。
我认为将这两个称为ours
,然后进一步称之为“策略”而另一个称为“战略论证”,最好是糟糕的计划,至少可以说是令人困惑的。 (它的出现是因为-X
值是传递给-s
参数选择的驱动程序的参数 - 但这种解释只会使情况更糟:“-s
参数是策略并且-X
参数是第一个参数的策略参数。“”什么,所以他们是争论的论点!?......等等,我们又在争论什么?“)
尽管如此,-s ours
策略确实完全符合您的要求:它假装合并,甚至没有查看其他分支。因此,如果您在上游为foo
的分支origin/foo
上,并且您已将图形绘制为起始位置,则:
git merge -s ours origin/foo
(也许还有一个明确的-m
消息,或者你可以在运行时使用编辑器来解释合并)将为你提供最终的图表。
答案 1 :(得分:2)
您只需删除远程分支,然后推送本地分支即可。我认为它不受限制。