我有一个远程裸仓库hub
。我只在master
分支工作。下面这个错误信息的最后一句话让我想知道:我如何找出哪个是 “您当前分支的默认配置远程”?我如何设置它?
[myserver]~/progs $ git remote -v
hub ~/sitehub/progs.git/ (fetch)
hub ~/sitehub/progs.git/ (push)
[myserver]~/progs $ git branch -r
hub/master
[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master
[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
6条答案
按热度按时间vbopmzt11#
您可以更简单地执行此操作,确保
.gitconfig
处于有意义的状态:使用Git v1.8.0及更高版本
按下时为
git push -u hub master
,或:git branch -u hub/master
或
(This会将 * 当前 checkout 分支 * 的远程设置为**
hub/master
**)git branch --set-upstream-to hub/master
或
(This会将名为
branch_name
的分支的远程设置为**hub/master
**)git branch branch_name --set-upstream-to hub/master
如果您使用的是
v1.7.x
或更早版本必须使用
--set-upstream
:git branch --set-upstream master hub/master
kcugc4gi2#
跟踪远程分支
你可以使用git-branch的track选项指定默认的远程仓库来进行推送和拉取操作。通常你可以在创建本地master分支时指定--track选项来实现这一点,但由于它已经存在,我们只需要手动更新配置,如下所示:
编辑您的
.git/config
现在你可以简单地git push和git pull。
[source](英文)
jckbn6z73#
为完整起见:前面的答案告诉了如何设置上游分支,但没有告诉如何查看它。
有几种方法可以做到这一点:
git branch -vv
显示所有分支的信息。(在大多数终端中为蓝色格式)cat .git/config
也显示了这一点。供参考:
wlwcrazw4#
这个问题的编程版本的答案是:
--show-current
选项在Git 2.22.0版之前不起作用。oknwwptz5#
Git:哪个是分支默认配置的远程?
对于一个名为
branch_name
的分支,使用以下语句读取它:详细信息
您可以通过
git config branch.branch_name.remote
以编程方式读取任何给定分支的本地存储的远程跟踪远程名称。假设你有一个名为
main
的分支,它跟踪的远程分支被设置为origin
,在这种情况下,你的.git/config
文件将包含以下内容:运行此程序:
...将读取该配置设置并返回
remote
。你可以使用这些模式以编程的方式读取或写入 * 任何 * git config变量,甚至是你自己发明或创建的变量。
示例:此命令:
git config --global blametool.editor subl
会将以下行添加到全局~/.gitconfig
文件的底部:你可以用下式读出变量值
subl
:git config blametool.editor
.这就是我如何设置一个blametool for my
git blametool
script。huwehgph6#
获得分支(例如主)的有效推动遥控的命令是:
原因如下(来自“man git config”输出):
分支.name.remote*[...]告诉git fetch和git push要从哪个远程数据库获取/推送到哪个远程数据库[...] [对于推送]可以用remote.pushDefault(对于所有分支)覆盖[并且]对于当前分支[..]进一步用branch.name.pushRemote[...]覆盖 *
出于某种原因,“man git push”只告诉分支.name.remote(即使它在三个中的优先级最低)+错误地声明如果它没有被设置,push默认为origin -它没有,只是当你克隆一个repo时,branch.name.remote被设置为origin,但如果你删除了这个设置,git push将失败,即使你仍然拥有origin remote