我经常重定功能分支的基,然后想强制将它们推送到服务器。
git push --force origin feature-mongodb-support
git push --force origin <current branch>有什么快捷方式吗?
git push --force origin <current branch>
0mkxixxg1#
可以使用别名缩短命令。这样使用它:
git config --global alias.fpush "push --force origin"
现在要推送您的分支,只需键入:
git fpush feature-mongodb-support
或者你甚至可以将分支名称硬编码到命令中:
git alias fpush "push --force origin feature-mongodb-support"
只使用git fpush将您宝贵的工作推到上游。然而,非快进更新是危险的,因为你基本上会覆盖服务器上发生在最后一次合并/变基到你的本地分支和强制推送之间的所有历史记录。如果你需要经常做这些事情,那么你的工作流程中肯定有错误。
git fpush
nzkunb0c2#
在阅读了这些答案并阅读了一个相关问题(https://stackoverflow.com/a/18782415/586)的答案后,我创建了这个别名,以根据当前分支名称强制推送到origin:
origin
fp = "!git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
jdzmm42g3#
您可以通过设置推送来更改默认行为。默认属性:
git config --global push.default current
然后:
git push -f
将强制推送到当前分支。下面是从http://schacon.github.io/git/git-config.html复制/粘贴的代码:
push.default
定义如果命令行中没有指定refspec,远程中没有配置refspec,并且命令行中的任何选项都没有隐含refspec,则git push应该执行的操作。可能的值为:
f2uvfpb94#
如果使用oh my zsh,则可以简单地执行
ggfl
它会帮你
git push --force-with-lease origin <your_argument>/$(current_branch)
https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet
oogrdqng5#
这应该可以达到目的:
git alias fpush "push --force origin"
这将允许您使用git fpush作为更短的替代方案。
qmelpv7a6#
为了自动强制推送到被跟踪的 * 分支 *(不管它的名称和上游),我设计了这个别名:
fbrpush=!git push $(git rev-parse --abbrev-ref=loose --symbolic-full-name @{upstream} \ | sed 's:/: +:')
(为了可读性,行已中断)
kyxcudwk7#
也可以自动推断当前分支名称。我使用一个小的shell脚本对当前分支执行强制推送:
git branch | grep '*' | awk '{print $2}' | xargs -I % git push origin % -f
命令git branch使用*符号标记当前分支,因此我们可以使用grep '*'获取相关行并解析它以获取分支名称。然后可以将快捷方式命令定义为.bashrc或.zshrc中的别名:
git branch
*
grep '*'
.bashrc
.zshrc
alias gfp=/path/to/script
更新。
从Git 222(看这个答案: www.example.com ),可以简化为:
alias git-fp='git branch --show-current | xargs -I % git push origin % --force-with-lease'
3zwtqj6y8#
扩展@jlleblanc的好答案,如果你想添加一个保护来防止强制推到master(这真的很难撤销)
[alias] fp = "!branch=$(git branch --show-current); [[ -z $branch || $branch = 'master' ]] && echo 'Command cannot be used on master branch or when not on branch.' || git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
它将做同样的事情,除了如果当前分支是主分支,它将跳过并打印警告
8条答案
按热度按时间0mkxixxg1#
可以使用别名缩短命令。这样使用它:
现在要推送您的分支,只需键入:
或者你甚至可以将分支名称硬编码到命令中:
只使用
git fpush
将您宝贵的工作推到上游。然而,非快进更新是危险的,因为你基本上会覆盖服务器上发生在最后一次合并/变基到你的本地分支和强制推送之间的所有历史记录。如果你需要经常做这些事情,那么你的工作流程中肯定有错误。
nzkunb0c2#
在阅读了这些答案并阅读了一个相关问题(https://stackoverflow.com/a/18782415/586)的答案后,我创建了这个别名,以根据当前分支名称强制推送到
origin
:jdzmm42g3#
您可以通过设置推送来更改默认行为。默认属性:
然后:
将强制推送到当前分支。
下面是从http://schacon.github.io/git/git-config.html复制/粘贴的代码:
push.default
定义如果命令行中没有指定refspec,远程中没有配置refspec,并且命令行中的任何选项都没有隐含refspec,则git push应该执行的操作。可能的值为:
*匹配-推送所有匹配的分支。两端具有相同名称的所有分支被认为是匹配的。这是默认值。
*upstream-将当前分支推到其上游分支。
*跟踪-已弃用的上游同义词。
*current-将当前分支推送到同名分支。
f2uvfpb94#
如果使用oh my zsh,则可以简单地执行
它会帮你
https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet
oogrdqng5#
这应该可以达到目的:
这将允许您使用
git fpush
作为更短的替代方案。qmelpv7a6#
为了自动强制推送到被跟踪的 * 分支 *(不管它的名称和上游),我设计了这个别名:
(为了可读性,行已中断)
kyxcudwk7#
也可以自动推断当前分支名称。
我使用一个小的shell脚本对当前分支执行强制推送:
命令
git branch
使用*
符号标记当前分支,因此我们可以使用grep '*'
获取相关行并解析它以获取分支名称。然后可以将快捷方式命令定义为
.bashrc
或.zshrc
中的别名:更新。
从Git 222(看这个答案: www.example.com ),可以简化为:
3zwtqj6y8#
扩展@jlleblanc的好答案,如果你想添加一个保护来防止强制推到master(这真的很难撤销)
它将做同样的事情,除了如果当前分支是主分支,它将跳过并打印警告