我在Git中创建了一个新分支:

git branch my_branch

推动它:

git push origin my_branch

现在假设有人在服务器上做了一些更改,我想从origin/my_branch中提取。我愿意:

git pull

但我得到:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "my_branch"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

我了解到,我可以通过以下方式实现:

git branch --set-upstream my_branch origin/my_branch

但为什么我需要为我创建的每个分支都这样做?如果我将my_branch推到origin/my_branch,那么我会想将origin/mi_branch拉到my_brance,这不是很明显吗?如何将此设置为默认行为?


当前回答

这是我最常用的“操”。

$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

$ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...

此外,在终端中键入脏话也很有趣。

其他回答

你可以简单地

git checkout -b my-branch origin/whatever

首先。如果您将branch.atosetupmerge或branch.atostubrebase(我最喜欢的)设置为总是(默认值为true),我的分支将自动跟踪origin/whatever。

请参阅git-help-config。

这是我最常用的“操”。

$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

$ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...

此外,在终端中键入脏话也很有趣。

我个人在bash中使用以下别名

在~/.gitconfig文件中

[alias]
    pushup = "!git push --set-upstream origin $(git symbolic-ref --short HEAD)"

和~/.bashrc或~/.zshrc文件中

alias gpo="git pushup"
alias gpof="gpo -f"
alias gf="git fetch"
alias gp="git pull"

对于那些希望使用git pull的别名的人,我使用的是:

alias up="git branch | awk '/^\\* / { print \$2 }' | xargs -I {} git branch --set-upstream-to=origin/{} {}"

现在,只要您得到:

$ git pull
There is no tracking information for the current branch.
...

只需运行:

$ up
Branch my_branch set up to track remote branch my_branch from origin.
$ git pull

你可以走了

您还可以明确地告诉gitpull要拉哪个远程分支(正如错误消息中提到的那样):

git pull<remote name><remote branch>

但是,要小心:如果您在不同的分支上执行显式拉取,那么您拉取的refspec将被合并到您所在的分支中!