This method avoids merge conflicts if you have periodically pulled master into your branch. It also gives you the opportunity to squash into more than 1 commit, or to re-arrange your code into completely different commits (e.g. if you ended up working on three different features but the commits were not consecutive).
Note: You cannot use this method if you intend to open a pull request to merge your feature branch. This method requires committing directly to master.
Switch to the master branch and make sure you are up to date:
git checkout master && git pull
Merge your feature branch into the master branch locally:
git merge feature_branch
Reset the local master branch to origin's state:
git reset origin/master
Now all of your changes are considered as unstaged changed. You can stage and commit them into one or more commits.
git add . --all
git commit
(Source)
This method only allows you to squash the last X consecutive commits into a single commit. Also, if you have merged master into your branch along the way, you will have to manually merge your new (squashed) commit into master and resolve the merge conflicts.
Use this method if you have not merged master into your branch, you plan to combine all commits into one, and you only changed one feature of the project; or, regardless of those conditions, you must use this method if you intend to open a pull request to merge your code.
To squash the last 3 commits into one:
git reset --soft HEAD~3
git commit -m "New message for the combined commit"
git push origin +name-of-branch
The plus sign forces the remote branch to accept your rewritten history, otherwise you will end up with divergent branches
git push origin name-of-branch
In other words, just a normal push like any other
Main source: http://stackoverflow.com/a/5201642/348995
Source for info about when commits where already pushed: http://stackoverflow.com/a/5668050/348995
git checkout master && git fetch && git pull
git pull
is a synonym forgit fetch && git merge
so your version willgit fetch
twice, although the second time it likely won't fetch anything, so it probably doesn't matter.git merge feature_branch
I think you are better to
The reason I say that is because if you've merged your feature_branch to your local master, how do you then push it to origin master with an opportunity for someone else to review & merge your commit? I don't think you can create a pull request from your local to a remote, only push directly,
Although, workflows in git differ, so this might work for you if no-one is reviewing the code and you are happy to just push direct to origin/master. If that's the case, creating branches is more of a convenience for working on multiple discrete changes and being able to switch between them cleanly.