我有一个远程裸库中心。我只在总行工作。 下面这个错误消息的最后一句话让我想知道:我如何找到哪个是“当前分支的默认配置远程”?怎么设置呢?

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

跟踪远程分支

您可以使用git-branch的track选项指定用于推送和拉取的默认远程存储库。你通常在创建本地主分支时通过指定——track选项来做到这一点,但由于它已经存在,我们只需要手动更新配置,如下所示:

编辑你的.git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

现在你可以简单地推和拉。

(来源)


你可以更简单地做到这一点,保证你的.gitconfig处于有意义的状态:

使用Git v1.8.0及以上版本

Git push -u hub master当push时,或: Git分支-u hub/master

OR

(这将把当前签出分支的远程设置为hub/master) Git分支——set-up - stream-to - hub/master

OR

(这将把名为branch_name的分支的远程设置为hub/master) Git分支branch_name——set-upstream-to - hub/master

如果您使用的是v1.7。X或更早

你必须使用——set-upstream: Git分支——set-upstream master hub/master


为了完整起见:前面的答案告诉我们如何设置上游分支,但没有告诉我们如何查看它。

有几种方法可以做到这一点:

Git branch -vv显示了所有分支的信息。(大多数终端以蓝色显示)

Cat .git/config也显示了这一点。

供参考:

如何让git显示哪个分支在跟踪什么? 这个分支在git中跟踪什么(如果有的话)?


获取分支(例如master)的有效推送远程的命令是:

git配置branch大师。pushRemote | | git配置遥控器。布兰奇pushDefault | | git配置远程大师。

以下是原因(来自“man git config”输出):

branch.name.remote[…告诉git从哪个远程获取/推送到[…]] [for push]可能被remote覆盖。pushDefault(所有分支)[和]当前分支[..]被branch.name.pushRemote[…]

出于某种原因,“man git push”只告诉branch.name.remote(即使它是三个中优先级最低的)+错误地声明,如果没有设置,push默认为origin -它没有,只是当你克隆一个repo时,branch.name.remote被设置为origin,但如果你删除这个设置,git push将失败,即使你仍然有origin remote


这个问题的编程版本的答案是:

git branch --list "$(git branch --show-current)" "--format=%(upstream:remotename)"

这将只输出当前分支的默认远程名称。——show-current选项在Git 2.22.0版本之前无效。


Git:哪个是分支的默认配置远程?

对于一个名为branch_name的分支,读取如下:

git config branch.branch_name.remote

细节

你可以通过git config branch.branch_name.remote通过编程方式读取任何给定分支的本地存储的远程跟踪远程名称。

假设您有一个名为main的分支,它跟踪的远程分支被设置为origin。在这种情况下,你的.git/配置文件将包含以下内容:

[branch "main"]
    remote = origin
    merge = refs/heads/main

运行:

git config branch.main.remote

...因此将读取该配置设置并返回remote。

您可以使用这些模式以编程方式读取或写入任何git配置变量,甚至是您自己发明或创建的变量。

例如:git config——global blametool。编辑器subl将这些行添加到全局~/的底部。gitconfig文件:

[blametool]
    editor = subl

你可以通过git config blametool.editor读取变量subl。

这就是我如何为我的git blametool脚本设置一个blametool。