What's the difference among "git fetch && git checkout" versus "git checkout" only?

mario ruiz picture mario ruiz · Jun 13, 2018 · Viewed 25.4k times · Source

Should do we always do as:

git fetch && git checkout

Or only,

git checkout

?

For example when doing a checkout from a branch in bitbucket they provide the command as:

enter image description here

git fetch && git checkout develop

But why is this necessary if

git checkout

will do the same, isn't it?

Answer

isaac weathers picture isaac weathers · Jun 22, 2018

To chime in here since I have to use Bitbucket daily for multiple projects and multiple branches I will give you my recommendation.

If you checkout from Bitbucket, i.e. create a branch, then you should be ok using the commands that they have provided as you pasted in your example. However, since it is likely that after the initial checkout you will be switching branches, creating branches and your local will get out of sync I recommend the following using your terminal. :

  1. git checkout develop or whatever branch you need
  2. git fetch && git pull i.e. fetch all branches and latest changes as well as pull in all changes from the branch you are on.

Yes this does seem like duplicate work but working with Bitbucket I will say that this is the safest and sanest way to ensure that you have the latest from the branch that you are working on.

That being said, you should always create branches and never push directly to your develop or master branches.

So let's say that you are on develop branch and you have done the above by checking out the branch and have fetched and pulled the latest you would then create a branch off of that main branch using standard git checkout -b my-feature-branch

Example of what we do at my shop:

  1. git checkout develop
  2. git fetch && git pull
  3. git checkout -b feature/JIRA_ISSUE_NUMBER-update-layout-for-this-page

Now you have checked out the develop branch, pulled down all the latest changes and remote branches and created a feature branch from that develop branch.

Hope this helps.