当我从新添加的远程服务器中提取数据时,我必须明确指定分支名称:
$ 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 branch
和git 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 及更高版本中)。