I’m quite new at GIT but I understood the basics pretty well. However, I’m feeling confused…
We’re using github, and my branch was 13 ahead and 20 behind the master branch (so quite out of date).
I did the following:
git checkout myBranch
git rebase master
I seem to have merged the same files repeatedly for some reason.
I guess it’s because I am applying my changes to each of different versions that were commited on the master branch?
This took quite a while, and when I was finished I assumed I could then just push my (now hopefully up to date) branch back to github. But it tells me I have non fast forward changes – which I don’t understand…
So then I do a pull, and git tells me I have to merge all the same files again…
I must be missing something fundamental in my understanding of what’s happening here.
Essentially
rebasetemporarily removes your commits, stores them as patches, gets the head of the master and then reapplies your patches.Here is a website that explains what git rebase is succulently – http://book.git-scm.com/4_rebasing.html .
BE CAREFUL: Here be dragons!
If you are absolutely certain there will be no issues, you can ignore the error and perform
git push --force. HOWEVER, you risk breaking the central repository. Not advised by Github – http://help.github.com/remotes/ Look for the sectionDealing with “non-fast-forward” errorsOr to try and resolve first pull and then push –
git pull origin masterthengit push origin masterOne option would be to use
git mergeinstead ofrebase.git pull origin masterto get the master up to date. There have been debates in the community on rebase vs merge and each have their pros and cons.To prevent duplicating the content, the articles covering the same topic – http://softwareswirl.blogspot.com/2009/04/truce-in-merge-vs-rebase-war.html, Git workflow and rebase vs merge questions and http://www.randyfay.com/node/89.
Examples of merging into master:
git checkout masterand thengit merge mybranchTo merge master into mybranch and then merge into master
git checkout mybranchand thengit merge mastergit checkout masterand thengit merge mybranch