I recently switched from Subversion to Git and while things have been mostly smooth, there have been a few “WTF?” moments. I am going to try and blog the few beginner ones I ran into in hopes of helping anyone else.
Today I ran a ‘git push’ to shove my commits from my local repository back into the main remote repo, the result was this:
$ git push No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'. error: failed to push some refs to 'email@example.com:painfreepr/<repo>.git'
The odd bit is that I had just done this with a previous repo about 30 mins ago and it worked fine; this was a new repository I was setting up. As it turns out this is the result of originally cloning an empty repository (link, link) which is exactly what I did. I had created a new repo on GitHub and wanted to pull the repo down in IntelliJ to then add some files to it via the GUI instead of from the command line; so I had checked out the empty repo right after creating it.
The fix, fortunately, is dead easy:
$ git push origin master
Doing this should provide output like:
$ git push origin masterCounting objects: 568, done.Delta compression using up to 2 threads.Compressing objects: 100% (559/559), done.Writing objects: 100% (568/568), 2.28 MiB | 2.18 MiB/s, done.Total 568 (delta 205), reused 0 (delta 0)To firstname.lastname@example.org:painfreepr/<repo>.git* [new branch] master -> master
It is my understanding that the core issue is that there are no files in common between the original remote repo you cloned (empty) and the one on-disk (now full of files). Doing the git-push-origin-master shoves your repo up into the empty repository and gives you that common base again so you can do a ‘git push‘ without issue.