如何将上游分支设置为与当前分支同名

29

如果我创建了一个新的分支并尝试推送它,系统会告诉我必须明确指定上游分支的名称。

> git checkout -b feature/long-branch-name-I-dont-want-to-have-to-type-out
Switched to a new branch 'feature/long-branch-name-I-dont-want-to-have-to-type-out'
> git push
fatal: The current branch feature/long-branch-name-I-dont-want-to-have-to-type-out has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feature/long-branch-name-I-dont-want-to-have-to-type-out

有没有不必手动输入上游分支名称就能实现的方法? 我几乎总是希望服务器上的名称与本地相同。

是否有一种类似于 git push --set-upstream <current_branch_name> 的方式,无论当前分支名称是什么都可以使用?

4个回答

36

配置 git config

$ git config --global push.default current

现在,在检出到分支后,您应该简单地使用git push

$ git checkout -b new-branch
$ git push                    # similar to git push -u origin new-branch
如果您想为将来设置上游,则使用--set-upstream(-u)标志:
$ git push -u origin HEAD

注意: HEAD 和本地当前分支通常保持相同状态。


真的很酷,对于这个答案。 - paul cheung
1
这个答案不应该比被采纳的答案得到更高的投票,因为它没有完成 OP 要求的操作。它没有执行git push --set-upstream <current_branch_name> - Good Night Nerd Pride

17

[编辑] sajib khan的第一个答案中,将push.default设置为current将启用推送,但实际上没有设置上游分支。这意味着在未来的git fetch之后,您的Git将不会报告 ahead/behind 计数,并且您的Git也不会知道要使用哪个上游分支进行git rebasegit merge(或者git pull,尽管我建议避免使用git pull)。

您可以使用[编辑],就像他回答的第二部分所说:

git push -u origin HEAD
如果需要,在另一个 Git 上创建该分支,以便您的 Git 获取 origin/ 变体。在任何情况下,它都会将您拥有的(可能是新的)远程跟踪分支设置为您分支的上游。但是,在 origin/feature/long-branch-name-I-dont-want-to-have-to-type-out 实际存在之前,您无法将其设置为上游。1
1 实际上,您是可以这样做的,只是不能使用 git branch --set-upstream 来完成。而且,您也不想再次输入它了。要手动执行此操作,您需要:
git config \
  branch.feature/long-branch-name-I-dont-want-to-have-to-type-out.remote origin
git config \
  branch.feature/long-branch-name-I-dont-want-to-have-to-type-out.merge \
  feature/long-branch-name-I-dont-want-to-have-to-type-out

这意味着你需要将其打三遍 (!),或者编写一个脚本。


2
所以基本上你想做的事情是这样的:git config --global alias.pushnew 'push -u origin HEAD' - Good Night Nerd Pride
@GoodNightNerdPride:那个(我指的是git push,而不是别名)实际上是我有时候自己运行的命令。 :-) - torek

3

这里有一些实用的Git命令可以帮助解决这个问题:

git rev-parse --abbrev-ref HEAD -> 返回当前分支名称。

git branch -u <remote>/<branch> -> 设置当前分支跟踪<remote>/<branch>

我经常做这样的事情,利用别名来帮助自己。

alias gph='git push origin $(git rev-parse --abbrev-ref HEAD)'
alias gbuh='git branch -u origin/$(git rev-parse --abbrev-ref HEAD)'

参考资料:


1

这是最好的回答版本,但被@Good Night Nerd Pride 埋在评论中了。

git config --global alias.pushnew 'push -u origin HEAD'

解释:

  1. push -u origin HEAD 是将当前分支名称推送到远程上游的更短方式。
  2. git config --global alias.pushnew 设置了当您运行 git push 时,它会像我们在 #1 中所做的那样设置上游。

并结合 @Sajib Khan当前被接受的答案

git config --global push.default current

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