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
.
怎么做到这一点?
删除远程分支并推送.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)
该-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
消息,或者你可以在运行时使用编辑器来解释合并)将为你提供你绘制的最终图形.