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

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

当我从新添加的远程服务器中提取数据时,我必须明确指定分支名称:

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

$ git pull remote1 master

尽管我正在分支机构工作master

从不同的远程仓库拉取不同的分支可能很有用,但我从来没有这样做过。在我们的团队中,我们从来不会将不同名称的分支拉取到当前签出的分支中。

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

答案1

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

git pull remote1 "$(git rev-parse --symbolic-full-name HEAD)"

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

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

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

像这样使用别名:

git pullcb remote1

我猜想这种类型的分支关系(需要轻松地从多个远程仓库中的任意一个上拉取同名分支)是不容易配置的,因为当大多数工作都在主题分支


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

您可以使用以下命令检查 Git 1.7.0 及更高版本中的分支的上游配置

git rev-parse --symbolic-full-name my-branch@{upstream}

您可以使用以下方式更新 Git 1.7.0 及更高版本中的上游配置

git branch --set-upstream my-branch some-remote/their-branch

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


branch.<name>.remote最终,分支的上游配置由和配置变量控制branch.<name>.merge(参见git 配置(1)--track--no-track选项git branchgit checkout可用于控制在创建分支时是否设置这些变量。branch.autoSetupMerge配置变量控制默认行为(当既未指定--track、 或 时--no-track);它默认为从远程跟踪分支创建的分支创建上游配置。因此,以下命令创建新的本地分支“my-branch”并将其配置为从远程“some-remote”跟踪分支“their-branch”:

git branch my-branch some-remote/their-branch
git checkout -b my-branch some-remote/their-branch

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

git config branch.my-branch remote && git config branch.my-branch.merge

git 配置(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

git 配置(1)以获得对值的描述。

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

相关内容