Git remote hates you
Posted on 17/11/09 by Felix Geisendörfer
No, you didn't do anything wrong. Git sometimes is like your best friend who secretly hates you. Let's say you start a fresh new project:
mkdir new-project cd new-project git init touch README git add README git commit -m 'first commit' git remote add origin git@github.com:felixge/new-project.git git push origin master
So far so good. But - if like any self respecting geek, you juggle a million git repositories on your machine - you will soon have forgotten whether you started or cloned this particular repository. If you are unlucky that means you will run into this:
% git push fatal: The current branch master is not tracking anything.
Not helpful. "git pull" seems to try to make up for it by giving you way too much information:
% git pull You asked me to pull without telling me which branch you want to merge with, and 'branch.master.merge' in your configuration file does not tell me either. Please specify which branch you want to merge on the command line and try again (e.g. 'git pull <repository> <refspec>'). See git-pull(1) for details. If you often merge with the same branch, you may want to configure the following variables in your configuration file: branch.master.remote = <nickname> branch.master.merge = <remote-ref> remote.<nickname>.url = <url> remote.<nickname>.fetch = <refspec> See git-config(1) for details.
Ok, so what exactly do I have to do to fix this? Right, you ignore all those blobs in your repository making fun of you, and type:
git pull origin master
Using git and feeling like one has a certain overlap in the beginning. On your way to git enlightenment, or to the madhouse, you may eventually discover the fix:
git config branch.master.merge refs/heads/master git config branch.master.remote origin
And no, do not, not even for a second, assume you could skip "branch.master.remote". Git remote will be very clear about how much it hates you if you do:
% git pull You asked me to pull without telling me which branch you ... # The 2s delay made you suspicious, turn off wifi % git pull ssh: Could not resolve hostname github.com: nodename nor servname provided, or not known fatal: The remote end hung up unexpectedly
What in the name of the kernel? Git clearly knows the remote you are talking about, its merely teasing you, possibly corrupting your repo by turning some blobs into LOLcats. For added frustration, here is my output for "git push":
% git push Bus error
This is probably unique to my install. In case git does not hate you equally, you can try to complain about it in #git. That of course will only result in people telling you that you are being unreasonable. To a kernel hacker, the idea of git remote making some smart assumptions when adding the first remote to your fresh repository that only has a single branch, that is like talking healthcare reform with a right-wing hardliner.
Disclaimer: I love git, but some parts of it seem to purely back up the name. But relax. I'll save talking about git modules, tracking empty folders and checking out partial trees for another time ...
-- Felix Geisendörfer aka the_undefined
You can skip to the end and add a comment.
Git remote loves me, or at least pretends to :) I've yet to encounter this problem, but I've only got less than a dozen repos.
Gordon: You are pretty much guaranteed to run into it if you start a new project on GitHub. If not, what is your flow like?
For me that only happens when i initially setup a repository.
Once your specify your first pull/push
ie.
git pull origin master
git push origin master
the commands
git pull
git push
works as expected however its good practice to push/pull with a specified REMOTE and BRANCH
Arnold Almeida: Could you check your ~/.gitconfig and .git/config of the repo? You either have some magic setting enabled or your workflow for initializing a repo is awesome.
What version do you use? I'm on 1.6.5.2
Never had this problem, but can reproduce yours.
I have a global push flag set.
You can do this via locally/globally via
git c0nfig push.default current
git c0nfig --global push.default current
Arnold: That will work for push, but not pull. Seems there is no pull counterpart either : |
You said "you may eventually discover the fix" but isn't the "fix" exactly what the "all those blobs in your repository making fun of you" was suggesting you to do? Yet you chose to ignore it?
This post is too old. We do not allow comments here anymore in order to fight spam. If you have real feedback or questions for the post, please contact us.
Oh I already knew git remote hates me. You should see the way it bitches when I try to alias a local branch name something different from the remote tracking branch.