获取当前分支名称以在Git命令中使用

23

有时我想使用当前分支名称在git命令中使用。例如

git push origin feature/really-long-branch-name

是否有一个git命令可以只给出分支名称,这样我就可以执行以下操作?

git push origin current_branch

git rev-parse --abbrev-ref HEAD,但在这种情况下并不实用。设置默认分支也没有什么帮助,因为分支名称经常更改。更改git push的默认行为也不是我要找的,因为这仍然意味着第一次 push 时必须输入完整的分支名称。

编辑:

版主们,这个问题不是重复的,请不要因为这个原因关闭。请仔细阅读我问题中加粗的部分。


4
问:git push当前分支的命令是什么?答:可以使用以下命令将当前分支推送到远程仓库:git push origin HEAD其中,origin是远程仓库的名称,HEAD表示当前所在的分支。 - Mostafa Hussein
可能是重复的问题:Git - push current branch shortcut - CharlesB
参见http://stackoverflow.com/questions/18197548/git-branch-bash-variable-shortcut - CharlesB
实际上,既然您已经知道如何获取当前分支的名称,那么为什么这不是另一个问题的重复?您只需设置 git config push.default current 即可。 - Todd A. Jacobs
@CodeGnome 更改 push.default 似乎只在初始 push 后起作用。因此,第一次仍需要编写完整的分支名称。 - Dty
2个回答

23

自从2019年6月起, 使用内置的--show-current标志

尽管这个来自2013年的答案经受住了时间的考验,但Git在2019年学会了一个新的git-branch标志,使得这一过程变得更加容易。在提交3710f60a80中,git-branch学会了一个新的标志,可以显示当前分支,而不需要用户解析分支或引用列表。你可以这样调用它:

$ git branch --show-current
main

以下其他方法仍然有效,但应该现在是Git版本> = v2.22.0的首选解决方案。

读取HEAD的符号引用

有许多方法可以获取当前分支的名称。最常用的方法是使用git-symbolic-ref(1)读取HEAD的符号引用。例如,假设您在master分支上:

$ git symbolic-ref HEAD | sed 's!refs\/heads\/!!'
master

使用 Ref

无论您如何解析它,您都可以通过调用您的 shell 的命令替换在另一个命令中使用符号名称。例如,在 Bash 中:

$ git log -n1 $(git rev-parse --abbrev-ref HEAD)

如果你愿意,你可以使用这个技巧来进行push或其他命令。

Push.Default

如果你只想将当前分支推送到同名的远程分支,并且没有其他解析refs的需求,那么最好使用Git的 push.default选项,该选项在这里这里有描述。例如:

git config push.default current

7
谢谢您的回答。但是 git rev-parse --abbrev-ref HEAD 看起来更直接。 - Dty
1
感谢更新。我认为Git不能做我想要的事情。所以看起来我需要编写一个别名来处理我的用例。 - Dty

4

使用HEAD

在git push的情况下,您可以使用HEAD。

文档中指出:

git push origin HEAD

将当前分支推送到远程同名分支的一个方便方法。

创建别名

对于无法使用HEAD的情况,我会为其创建一个别名。我只熟悉Mac环境,此解决方案适用于该平台,但我相信在Windows上也有类似的方法。

在您的~/.bash_profile中创建此别名:

alias current_branch="git rev-parse --abbrev-ref HEAD"

您可以通过以下方式在git命令中使用它:

git push origin `current_branch`

谢谢,这真的很方便!我以前从未学过使用“ ` ”替换命令输出,通常我的别名无需它们就可以运行,但在这种情况下是必需的,因此git会将推送发送到别名分支而不是别名名称 :) - s6mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接