我在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命令之一,可以让git自动创建上游分支

git-config--global--添加push.default电流git-config--global--add push.autoSetupRemote true

其他回答

通过运行以下git命令之一,可以让git自动创建上游分支

git-config--global--添加push.default电流git-config--global--add push.autoSetupRemote true

99%的时间我想将上游设置为同名分支,所以我使用这个(在*nix或GitBash中):

git branch --set-upstream-to=origin/$(git branch --show-current)

这很好,因为它是分支不可知的。请注意,子命令gitbranch--show current会打印当前的分支名称,如果已分离,则不打印。

附带说明:我的配置设置为可以使用gitpush-u,所以我很少需要这样做。但我有时还是会这样做,通常是在我决定要将本地更改重置为远程设备上的任何更改时,这时我意识到我以前在推送时没有使用-u。因此,通常,在设置上游后,我要运行的下一个命令是重置远程分支:

git reset --hard @{u}

这也恰好是分支不可知的。(也许我真的不喜欢输入我的分行名称。)

这是我最常用的“操”。

$ 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.
...

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

我做了一些类似于许多其他用户的事情,但我想分享它作为一种替代,因为我没有看到其他人发布这篇文章。

alias gpu='git push --set-upstream origin $(git branch --show-current)'

(噢,我的zsh已经有一个gpu别名,在.oh-my-zsh/plugins/git/git.plugin.zsh中进行了编辑)

因为git能够将不同的分支推/拉到不同的“上游”存储库。您甚至可以使用单独的存储库来推送和拉取同一个分支。这可以创建一个分布式、多层次的流,我可以看到这在诸如Linux内核之类的项目上非常有用。Git最初是为用于该项目而构建的。

因此,它没有假设您的分行应该跟踪哪个回购协议。

另一方面,大多数人不会以这种方式使用git,因此它可能是一个很好的默认选项。

Git通常是相当低级的,它可能会令人沮丧。然而,有GUI,如果您仍然想从shell使用它,那么编写助手脚本应该很容易。