I’m using Linonde to host my git repos and also the actual site files.
git branch -r looks like this:
company/master
company/stage
origin/HEAD -> origin/master
origin/master
prod/master
git branch looks like this:
master
stage
I think I’m trying to simply have my local stage branch point to my company/master head. When I do a git push company stage it seems to update my stage head on the server but I’m trying to get it to update the master head which is where my site seems to serve it’s files from. Or I need to figure out how to point my site to the company/stage head.
I tried deleting my branch and making one with
git branch stage company/master
as I thought the start-point might be what I needed.
Put when I try to push after that I get the message:
error: failed to push some refs to 'root@foo:~repos/project_name'
To Prevent you from losing history, non-fasst-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.)
I tried a git pull but it said everything was up to date and I couldn’t see anything in the fast forward help docs addressing my situation.
Firstly, it’s worth explaining what happens when you do:
The last parameter there is a really a refspec, which defines a mapping between a source ref and a destination ref – in the simple cases you’re likely to be dealing with, these “refs” are branch names. If there’s no
:in the refspec, then it’s assumed that you want to push to a branch of the same name. So, the command you’ve run is equivalent to:If, instead, you want to update the
masterbranch in thecompanyrepository, then you need to do:Moving on, when you deleted your branch and recreated it with:
… that creates entries in your git config that associate your local branch
stagewith the branchmasterin the repositorycompany. ¹ That means that if you are on the branchstage, runninggit pullshould do the right thing, which in this case would be to update the remote-tracking branchcompany/master, and merge that intostage.Unfortunately (and confusingly) these config options don’t (by default) affect the behaviour of
git push, which I wrote about in some detail elsewhere. You don’t mention the form of thegit pushcommand that you then used, but you should have been doing:… if you want to update the
masterbranch in thecompanyrepository with your localstagebranch. (If you just trygit push company, that will try to push every “matching” branch between your local repository andcompany, where “matching” means “a branch of the same name exists locally and remotely”. You can change this behaviour by setting thepush.defaultconfig option totracking.)¹ In earlier versions of git you would have had to add the
--trackparameter, but for a while that has been the default where the start point is a remote-tracking branch.