Git:合并时丢弃远程分支上的所有更改

Wlo*_*oHu 4 git git-merge git-remote

案例类似于:Git:丢弃分散的本地分支上的所有更改.

区别:

  • 我想丢弃已推送到远程存储库的更改,
  • git push origin foo:foo --force 被拒绝(原点不允许推力).

给定提交图:

A--B--C--O1--O2--O3 (foo)
       \
         L1--L2--L3 (origin/foo)
Run Code Online (Sandbox Code Playgroud)

如果可能,我想实现这个目标:

A--B--C--O1--O2--O3 (foo origin/foo)
Run Code Online (Sandbox Code Playgroud)

如果以上是不可能的,那么以下对我来说是好的:

A--B--C--O1--O2--O3--M1 (foo)
       \            /
         L1--L2--L3 (origin/foo)
Run Code Online (Sandbox Code Playgroud)

但我希望git diff M1..03是空的,即丢弃所引入的所有变化origin/foo.和-s ours策略并没有帮助,因为这仅适用于冲突和冲突的非-变化仍然会被添加到M1.

怎么做到这一点?

解决方案(Mohan Kumar P撰写)

删除远程分支并推送.git如果跟踪(检查git branch -vv),应自动创建远程分支.

为达到这个:

A--B--C--O1--O2--O3 (foo origin/foo)
       \
         L1--L2--L3
Run Code Online (Sandbox Code Playgroud)

类型:

git push origin --delete foo
git checkout foo  # Git ? 1.6.6.
git push origin foo
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 6

-s ours战略确实有效.这是-X ours"策略论证"不起作用(因为你给出的原因).

我认为将这两者都称之为ours,然后进一步称之为"策略"而另一个称为"战略论证",充其量只是糟糕的计划,至少可以说是令人困惑的.(它的出现是因为-X值是传递给-s参数选择的驱动程序的参数 - 但这种解释只会使情况变得更糟:" -s参数是策略,-X参数是第一个参数的策略参数." "什么,所以他们是争论的论点!?......等等,我们又在争论什么?")

尽管如此,该-s ours策略确实正是您所要求的:它假装合并,甚至没有看到其他分支.因此,如果您在foo上游的分支上,origin/foo并且您已绘制了作为起始位置的图形,则:

git merge -s ours origin/foo
Run Code Online (Sandbox Code Playgroud)

(也许还有一个明确的-m消息,或者你可以在运行时使用编辑器来解释合并)将为你提供你绘制的最终图形.


Moh*_*r P 3

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