You're in working in the repos
foo. You're working on a feature branch
git checkout beautiful-flower
You pull requested that branch. Someone did
origin/master and now your branch is outdated.
You want to update your branch with
origin, to get all the updates on it:
git fetch origin
Now do an interactive rebase of
origin/master on your branch. It will
basically take your commits and place on top of the last commits on
origin/master, without the useless merge commits of a
git rebase -i origin/master
Now you can
pick the commits you want,
squash the commits you want
to concatenate with the previous one (or
fixup, better than
squash when you
want to discard the commit message),
reword the commits with more
beautiful messages and so on.
If something gets into conflict, resolve it,
git add the files and
git rebase --continue. If you do something wrong during the rebase,
don't worry, just do a
git rebase --abort and start everything again
git rebase -i origin/master.
After you have completed the rebase, your log should have all the
origin/master on bottom and the commits of your branch
Now your branch is update with
origin/master. If you want to
push those updates to your remote branch, go ahead.
In some cases (when you change the history of your repos), git will
say your branch and
origin/master diverged and will suggest you to
git pull. Don't do that. Do a
git push origin beautiful-flower and
if it needs to, force it with
git push --force origin beautiful-flower.
Double check that you're not pushing to master!
git rebase -i HEAD~n where
n is the number of commits you want to
tweak. Now you can pick, squash, delete, reorder, reword and do other
It helps us to keep our history tight and readable.
Nice one, however I didn't follow it so much:
The slides of author is here.
mastershould be also ready to deployment
origin/masterwhen you need feedback/help from someone else or when it's ready to merge
Other practices from my own:
git commit and other commands. It will give you the possibility
to split your changes ini multiple commits.
Enemy of clean commits.
NEVER! EVER! EVER!
You should always add
git push --force <remote> <branch>!
"For teams that have to do formal releases on a longer term interval (a few weeks to a few months between releases), and be able to do hot-fixes and maintenance branches and other things that arise from shipping so infrequently, git-flow makes sense and I would highly advocate it’s use.
For teams that have set up a culture of shipping, who push to production every day, who are constantly testing and deploying, I would advocate picking something simpler like GitHub Flow."
Git only cleans cache after days (weeks?). It stores every reference. To list all references:
Find the hash of the commit you want to go back and then:
git reset --hard <HASH HERE>
git rebase: http://nathanleclaire.com/blog/2014/09/14/dont-be-scared-of-git-rebase/