我经常 rebase 功能分支,然后想强制将它们推送到服务器。
git push --force origin feature-mongodb-support
有什么捷径git push --force origin <current branch>
吗?
您可以使用别名来缩短命令。像这样使用它:
git config --global alias.fpush "push --force origin"
现在推送你的分支只需输入:
git fpush feature-mongodb-support
或者您甚至可以将分支名称硬编码到命令中:
git alias fpush "push --force origin feature-mongodb-support"
并且仅git fpush
用于将您的宝贵工作推入上游。
但是,非快进更新是危险的,因为您基本上会覆盖服务器上在最后一次合并/变基到本地分支和强制推送之间发生的所有历史记录。如果您需要经常这样做,那么您的工作流程肯定有问题。
在阅读了这些答案并阅读了相关问题的答案(https://stackoverflow.com/a/18782415/586)之后,我创建了这个别名以origin
根据当前分支名称强制推送:
fp = "!git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
您可以通过设置push.default属性来更改默认行为:
git config --global push.default current
然后:
git push -f
将强制推送到您当前的分支。
这是来自http://schacon.github.io/git/git-config.html的复制/粘贴:
push.default
定义如果命令行上没有给出 refspec,远程中没有配置 refspec,并且命令行上给出的任何选项都没有暗示 refspec,则 git push 应该采取的操作。可能的值为:
什么- 不要推动任何东西。
匹配- 推送所有匹配的分支。在两端具有相同名称的所有分支都被认为是匹配的。这是默认设置。
upstream - 将当前分支推送到其上游分支。
tracking - 不推荐使用的上游同义词。
current - 将当前分支推送到同名分支。
如果你使用oh my zsh你可以简单地做
ggfl
这将为你做这件事
git push --force-with-lease origin <your_argument>/$(current_branch)
这应该可以解决问题:
git alias fpush "push --force origin"
这将使您可以将git fpush
其用作较短的替代方案。
为了自动强制推送到被跟踪的分支(不管它的名字和上游),我设计了这个别名:
fbrpush=!git push $(git rev-parse --abbrev-ref=loose --symbolic-full-name @{upstream} \
| sed 's:/: +:')
(为了便于阅读,换行)
(基于另一个 SO 答案)
当前分支名称也可以自动推断。
我使用一个小的 shell 脚本来强制推送到当前分支:
git branch | grep '*' | awk '{print $2}' | xargs -I % git push origin % -f
该命令git branch
用符号标记当前分支*
,因此我们可以获取相关行grep '*'
并对其进行解析以获取分支名称。
然后可以将快捷命令定义为.bashrc
or中的别名.zshrc
:
alias gfp=/path/to/script