git 力推电流分支

vnjpjtjt  于 2023-04-28  发布在  Git
关注(0)|答案(8)|浏览(132)

我经常重定功能分支的基,然后想强制将它们推送到服务器。

git push --force origin feature-mongodb-support

git push --force origin <current branch>有什么快捷方式吗?

0mkxixxg

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将您宝贵的工作推到上游。
然而,非快进更新是危险的,因为你基本上会覆盖服务器上发生在最后一次合并/变基到你的本地分支和强制推送之间的所有历史记录。如果你需要经常做这些事情,那么你的工作流程中肯定有错误

nzkunb0c

nzkunb0c2#

在阅读了这些答案并阅读了一个相关问题(https://stackoverflow.com/a/18782415/586)的答案后,我创建了这个别名,以根据当前分支名称强制推送到origin

fp = "!git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
jdzmm42g

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应该执行的操作。可能的值为:

  • “什么都不要做,什么都不要推。
    *匹配-推送所有匹配的分支。两端具有相同名称的所有分支被认为是匹配的。这是默认值。
    *upstream-将当前分支推到其上游分支。
    *跟踪-已弃用的上游同义词。
    *current-将当前分支推送到同名分支。
f2uvfpb9

f2uvfpb94#

如果使用oh my zsh,则可以简单地执行

ggfl

它会帮你

git push --force-with-lease origin <your_argument>/$(current_branch)

https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet

oogrdqng

oogrdqng5#

这应该可以达到目的:

git alias fpush "push --force origin"

这将允许您使用git fpush作为更短的替代方案。

qmelpv7a

qmelpv7a6#

为了自动强制推送到被跟踪的 * 分支 *(不管它的名称和上游),我设计了这个别名:

fbrpush=!git push $(git rev-parse --abbrev-ref=loose --symbolic-full-name @{upstream} \
                    | sed 's:/: +:')

(为了可读性,行已中断)

kyxcudwk

kyxcudwk7#

也可以自动推断当前分支名称。
我使用一个小的shell脚本对当前分支执行强制推送:

git branch | grep '*' | awk '{print $2}' | xargs -I % git push origin % -f

命令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'
3zwtqj6y

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)\""

它将做同样的事情,除了如果当前分支是主分支,它将跳过并打印警告

相关问题