Git:合并

时间:2016-09-30 06:29:44

标签: git git-merge git-remote

案例类似于: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

如何做到这一点?

SOLUTIONMohan Kumar P

删除远程分支并推送。 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

2 个答案:

答案 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)

您只需删除远程分支,然后推送本地分支即可。我认为它不受限制。