Git Force推送语法,“ - f”与“+ branch”

时间:2014-09-19 15:45:10

标签: git

当强制推送更改时,这两个git命令有什么区别?

git push -f origin branchgit push origin +branch

1 个答案:

答案 0 :(得分:46)

TL; DR

如果你只是推动一个分支,那就没有区别了。

git push -f origin branch

git push origin +branch

是完全等价的。当您使用单个git push推送多个分支时会出现差异。

简而言之,可选+为您提供比-f 更精细的控制:如果您一次推送多个参考,{{1允许您指定哪个推送的引用被强制推送,而+(或--force)适用于所有被推送的引用。

更多细节

-f手册页告诉你什么

git-push涉及一个或多个refspec的最基本形式是

git push

git push <repository> <refspec>... 参数必须满足的格式在<refspec>...手册页中描述:

  

git-push

<refspec>...

因此,为了清楚起见,Specify what destination ref to update with what source object. The format of a `<refspec>` parameter is an optional plus `+`, followed by the source object `<src>`, followed by a colon `:`, followed by the destination ref `<dst>`. 的语法是

<refspec>

如果省略[+]<src>[:<dest>] ,则会更新与:<dst>相同的引用...除非Git配置中的<src>条目(如果有)另有说明。

git-push man page中进一步向下,找到

  

通过使用可选的前导remote.<repository>.push,您可以告诉Git更新+   即使默认情况下不允许,也请参考(例如,它不是   快进。)这不会尝试将<dst>合并到<src>

还有更进一步:

  

请注意,<dst>适用于所有推送的引用,因此   在--force设置为push.default或多次推送时使用它   使用matching配置的目标可能会覆盖其他参考号   比当前分支(包括严格落后的本地裁判)   他们的远程对手)。要强制推送到一个分支,请使用remote.*.push   在refspec面前推(例如+强迫   推送到git push origin +master分支。)

实施例

考虑一个带有两个分支mastermaster的本地仓库,您希望将其推送(使用单个develop命令)到git push远程。

  • origin将推动两个分支,但两者都不会被强制推送。

  • git push origin master develop将推送两个分支,但只有git push origin +master develop才会被强制推送。

  • 相反,
  • master将推送两个分支,但只有git push origin master +develop才会被强制推送。

  • develop将强制推送两个分支。它完全等同于git push origin +master +develop