如何设置默认拉同一个分支?

Xiè*_*léi 5 remote git branch

当我从新添加的遥控器中提取时,我必须明确指定分支名称:

$ git pull remote1
... 
Error: you didn't specify a branch name.

$ git pull remote1 master
Run Code Online (Sandbox Code Playgroud)

虽然我在master分支上工作。

从不同遥控器的不同分支中提取可能很有用,但它从未发生在我身上。在我们的团队中,我们从不将不同名称的分支拉到当前签出的分支中。

那么,我可以将 git 配置为始终从具有相同名称的分支中提取吗?

Chr*_*sen 7

如果您不想重置本地分支的“上游配置”,可以使用以下命令:

git pull remote1 "$(git rev-parse --symbolic-full-name HEAD)"
Run Code Online (Sandbox Code Playgroud)

如果您的本地 HEAD 分离,它可能会做意想不到的事情。

您可以将其打包为 Git 别名以使其更易于键入(尽管您仍然需要将别名分发给所有用户):

git config --global alias.pullcb \
 '!sh -c '\''git pull "$1" "$(git rev-parse --symbolic-full-name HEAD)"'\'' -'
Run Code Online (Sandbox Code Playgroud)

像这样使用别名:

git pullcb remote1
Run Code Online (Sandbox Code Playgroud)

我猜想这种类型的分支关系(需要轻松地从几个遥控器中的任何一个上的同名分支中提取)不容易配置,因为当大多数工作在主题分支中完成时它很少有用。


另一方面,如果“新远程”将成为您本地分支的新主要上游源,那么您应该考虑更新本地分支的“上游配置”,以便您可以简单地使用git pull(无需指定远程名称)。

可以检查上游配置为一个分支在GIT中1.7.0和后来1

git rev-parse --symbolic-full-name my-branch@{upstream}
Run Code Online (Sandbox Code Playgroud)

可以在GIT中1.7.0更新上游配置和后面2

git branch --set-upstream my-branch some-remote/their-branch
Run Code Online (Sandbox Code Playgroud)

一旦您的分支具有适当的上游配置,您就可以简单地使用git pull从当前分支的“上游分支”中拉取。


最终,分支的上游配置由branch.<name>.remotebranch.<name>.merge配置变量控制(请参阅git-config(1))。该--track--no-track的选项git branch,并git checkout可以用来控制是否创建一个分支时,这些变量的设置。所述branch.autoSetupMerge配置变量控制默认行为(当既不--track,也不--no-track给出); 它默认为从远程跟踪分支创建的分支创建上游配置。因此,以下命令创建新的本地分支“my-branch”并将其配置为从远程“some-remote”跟踪分支“他们的分支”:

git branch my-branch some-remote/their-branch
git checkout -b my-branch some-remote/their-branch
Run Code Online (Sandbox Code Playgroud)

1 对于 1.7.0 之前的 Git 版本,您可以像这样检查“my-branch”的上游配置:

git config branch.my-branch remote && git config branch.my-branch.merge
Run Code Online (Sandbox Code Playgroud)

有关值的说明,请参阅git-config(1)

您也可以手动检查.git/config文件。

2 对于 1.7.0 之前的 Git 版本,您可以像这样更改“my-branch”的上游配置:

git config branch.my-branch.remote some-remote &&
git config branch.my-branch.merge refs/heads/their-branch
Run Code Online (Sandbox Code Playgroud)

有关值的说明,请参阅git-config(1)

您还可以手动编辑.git/config文件(git config -e在 Git 1.6.3 及更高版本中)。