强制推动当前分支

ibl*_*lue 42 git git-push git-alias

我经常修改功能分支,然后强制将它们推送到服务器.

git push --force origin feature-mongodb-support
Run Code Online (Sandbox Code Playgroud)

有没有捷径git push --force origin <current branch>

Ser*_* K. 28

您可以使用别名来缩短命令.像这样使用它:

git config --global alias.fpush "push --force origin"
Run Code Online (Sandbox Code Playgroud)

现在推送您的分支只需输入:

git fpush feature-mongodb-support
Run Code Online (Sandbox Code Playgroud)

或者您甚至可以将分支名称硬编码到命令中:

git alias fpush "push --force origin feature-mongodb-support"
Run Code Online (Sandbox Code Playgroud)

并且只git fpush用于将宝贵的工作推向上游.

但是,非快进更新是危险的,因为您基本上会覆盖服务器上最后一次合并/ rebase到本地分支和强制推送之间发生的所有历史记录.如果您经常需要这样做,那么您的工作流程肯定存在问题.

  • 是的,这很危险.您只需一个命令就会覆盖您的分支.更好的一点是,在功能完成后,在主分支上交互式地重新设置功能分支.您的主人仍然会有一个干净的历史记录,所有这些覆盖都不会有风险. (2认同)

小智 9

您可以通过设置push.default属性来更改默认行为:

git config --global push.default current
Run Code Online (Sandbox Code Playgroud)

然后:

git push -f
Run Code Online (Sandbox Code Playgroud)

将强制推送到您当前的分支。

这是来自http://schacon.github.io/git/git-config.html的复制/粘贴:

默认推送

定义如果命令行上没有给出 refspec、远程中没有配置 refspec、并且命令行上给出的任何选项都没有暗示 refspec,则 git Push 应采取的操作。可能的值为:

  • 什么都没有——不要推动任何东西。

  • 匹配- 推送所有匹配的分支。所有两端具有相同名称的分支都被认为是匹配的。这是默认设置。

  • 上游- 将当前分支推送到其上游分支。

  • 跟踪- 上游已弃用的同义词。

  • current - 将当前分支推送到同名分支。


jll*_*anc 7

阅读完这些答案并阅读相关问题(/sf/answers/1314769081/)后,我创建了这个别名,origin根据当前分支名称强制推送到:

fp = "!git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
Run Code Online (Sandbox Code Playgroud)