I honestly cannot find any detailed documentation of the output of git remote show
(certainly not on the man page)
In particular, a clear, exact explanation of the Local
sections would be appreciated.
An example of what I find confusing:
Here I have two remotes, klas and origin and the output they produce:
> git remote show klas
* remote klas
Fetch URL: ..\klasrepo
Push URL: ..\klasrepo
HEAD branch: master
Remote branches:
experiment tracked
feature tracked
master tracked
pu tracked
stashbranch tracked
Local branch configured for 'git pull':
pu merges with remote pu
Local refs configured for 'git push':
experiment pushes to experiment (fast-forwardable)
feature pushes to feature (fast-forwardable)
master pushes to master (fast-forwardable)
pu pushes to pu (up to date)
> git remote show origin
* remote origin
Fetch URL: C:/Temp/git/.\barerepo.git
Push URL: C:/Temp/git/.\barerepo.git
HEAD branch: experiment
Remote branches:
experiment tracked
master tracked
Local branches configured for 'git pull':
experiment merges with remote experiment
master rebases onto remote master
Local refs configured for 'git push':
experiment pushes to experiment (up to date)
master pushes to master (fast-forwardable)
Notice that experiment and master are listed under both local refs configured for 'git push'
. What does that mean? I have configured master and experiment to track origin/master and origin/experiment respectively (and pu to track klas/pu).
My local feature branch is not set up to track anything, but is still listed under local refs configured for 'git push'
(the only connection seems to be the identical name, another non-tracking branch, foo, is not mentioned). git push
while on feature gives fatal: The current branch feature has no upstream branch.
- hardly "fast-forwardable".
It seems that the criteria for a local branch being listed under local refs configured for 'git push'
is that there happens to exist a remote branch with the same name??
For reference:
> git branch -vva
experiment 0cf7b2a [origin/experiment] added rand content 82 to .\rand_content.txt
* feature 4b25f46 added rand content 62 to bar.txt
foo 40aee50 added rand content 17 to .\rand_content.txt
master 4b25f46 [origin/master] added rand content 62 to bar.txt
pu 44ad10b [klas/pu] added rand content 51 to doo.txt
remotes/klas/experiment 1f4e89b app
remotes/klas/feature 884e953 added rand content 80 to bar.txt
remotes/klas/master 57877c1 added in tobias repo
remotes/klas/pu 44ad10b added rand content 51 to doo.txt
remotes/klas/stashbranch 8678cf0 added rand content 44 to .\rand_content.txt
remotes/origin/HEAD -> origin/master
remotes/origin/experiment 0cf7b2a added rand content 82 to .\rand_content.txt
remotes/origin/master 4b25f46 added rand content 62 to bar.txt
> git config --list --local | select-string 'branch|remote'
remote.origin.url=C:/Temp/git/.\barerepo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.master.rebase=true
remote.klas.url=..\klasrepo
remote.klas.fetch=+refs/heads/*:refs/remotes/klas/*
branch.experiment.remote=origin
branch.experiment.merge=refs/heads/experiment
branch.pu.remote=klas
branch.pu.merge=refs/heads/pu
> git --version
git version 1.8.1.msysgit.1
This appears to be a bug in Git 1.8.1.
Skimming the Git source code (specifically remote.c
and builtin/remote.c
), the list under "Local refs configured for 'git push'" is calculated as follows:
.git/remotes/<remotename>
(an obsolete config file; see git help repository-layout
).git/branches/<branchname>
(another obsolete config file)remote.<remotename>.push
config item:
as the only push refspecNote that the above algorithm doesn't pay attention to branch.<branchname>.remote
, branch.<branchname>.merge
, or push.default
.
Under typical usage patterns, step #1 in the above algorithm will never find any configured refspecs so :
will be used. That refspec is a simple matching refspec, so with typical usage git remote show <remotename>
will always print <branchname> pushes to <branchname>
if there is a branch named <branchname>
in both the local and remote repositories.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With