Git: 丢弃远程分支上的所有更改并推送本地更改而不强制推送
Git: Discard all changes on remote branch and push local changes without force push
案例类似于: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
。
我该怎么做?
(by Mohan 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
-s ours
策略 确实 有效。是 -X ours
"strategy argument" 不起作用(因为你给出的原因)。
我认为将它们都称为 ours
,然后将其中一个称为 "strategy",将另一个称为 "strategy argument" 充其量是糟糕的计划,因为它令人困惑,至少可以说. (它的出现是因为 -X
值是传递给由 -s
参数选择的驱动程序的参数——但这种解释只会让它变得更糟:"The -s
argument is the strategy and the -X
arguments are the arguments to the strategy from the first argument." "What, so they're argument arguments!? ... Wait, what are we arguing about again?")
尽管如此,-s ours
策略确实完全符合您的要求:它假装合并,甚至没有查看其他分支。因此,如果您在上游为 origin/foo
的分支 foo
上,并且您将绘制的图形作为起始位置,则:
git merge -s ours origin/foo
(也许还有明确的 -m
消息,或者您可以在运行时使用编辑器来解释合并)将为您提供最终绘制的图形。
您可以简单地删除远程分支,然后推送您的本地分支。我认为它不受限制。
案例类似于: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
。
我该怎么做?
(by Mohan 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
-s ours
策略 确实 有效。是 -X ours
"strategy argument" 不起作用(因为你给出的原因)。
我认为将它们都称为 ours
,然后将其中一个称为 "strategy",将另一个称为 "strategy argument" 充其量是糟糕的计划,因为它令人困惑,至少可以说. (它的出现是因为 -X
值是传递给由 -s
参数选择的驱动程序的参数——但这种解释只会让它变得更糟:"The -s
argument is the strategy and the -X
arguments are the arguments to the strategy from the first argument." "What, so they're argument arguments!? ... Wait, what are we arguing about again?")
尽管如此,-s ours
策略确实完全符合您的要求:它假装合并,甚至没有查看其他分支。因此,如果您在上游为 origin/foo
的分支 foo
上,并且您将绘制的图形作为起始位置,则:
git merge -s ours origin/foo
(也许还有明确的 -m
消息,或者您可以在运行时使用编辑器来解释合并)将为您提供最终绘制的图形。
您可以简单地删除远程分支,然后推送您的本地分支。我认为它不受限制。