如何每次将一个未知名称的分支推送到它的远程?

时间:2014-05-09 21:07:38

标签: git github

通常当我按下我使用的git push origin master时,我通常会在脑海中读到,请从本地主人那里推送到远程来源。我现在正在制作一个需要用很多人的剧本。假设我们有一个名为Release 1.0的远程分支。我希望我的脚本能够自动将用户分支推送到它的远程,无论分支的名称是什么。因此,假设我们有一个名为experimentalBranch的分支,它基于1.0版。无论名称如何,我怎么能总是把分支推到它的远程?按照我的正常方式,它不起作用,因为我指定了本地分支名称master。

我应该补充一点,我也不知道遥控器的名称。基本上我想说“把我的本地分支推到它的远程,无论本地和远程可能是什么。”

3 个答案:

答案 0 :(得分:1)

您想要的脚本:

current_branch=$(git rev-parse --abbrev-ref HEAD)
git push origin $current_branch

您可以在终端输入这些行,或将它们放在一个文件中并将该文件作为脚本运行。

如果你想在终端上找到像git push origin self这样的好东西,可以把它放在〜/ .bashrc中:

git()
{
  if [ "$1" == "push" ] && [ "$2" == origin ] && [ "$3" == "self" ]; then
    current_branch=$(git rev-parse --abbrev-ref HEAD)
    git push origin $current_branch
  else
    command git "$@"
  fi
}

答案 1 :(得分:1)

使用正确的分支名称将其推送到给定的远程名称,无论它是什么:

git push origin HEAD

不幸的是,您仍然需要知道远程名称。

如果你想要一些即使不知道远程名称也可以工作的东西,它会有点复杂。我能找到的最好的方法是这个命令,它打印远程跟踪分支的名称,包括远程名称:

git rev-parse --abbrev-ref --symbolic-full-name @{u}

remotename/branchname格式输出。从这里你可以使用bash提取远程名称,例如:

refname=$(git rev-parse --abbrev-ref --symbolic-full-name @{u})
IFS=/ read -a arr <<< "$refname"
remote=${arr[0]}
branch=${arr[1]}

然后你可以像这样推动:

git push $remote $branch
# actually this should do as well:
# git push $remote HEAD

答案 2 :(得分:0)

你可能想要这个:

git config --global push.default current

配置完成后,您执行以下操作:

git push foobar

它基本上会被翻译成:

git push foobar HEAD