How to check the differences between a local and GitHub repository before the pull [duplicate]
Before using pull, I want to check if there are any differences between my local and GitHub master.
How can I do it?
Solution 1:
git pull
is really equivalent to running git fetch
and then git merge
. The git fetch
updates your so-called "remote-tracking branches" - typically these are ones that look like origin/master
, github/experiment
, etc. that you see with git branch -r
. These are like a cache of the state of branches in the remote repository that are updated when you do git fetch
(or a successful git push
).
So, suppose you've got a remote called origin
that refers to your GitHub repository, you would do:
git fetch origin
... and then do:
git diff master origin/master
... in order to see the difference between your master
, and the one on GitHub. If you're happy with those differences, you can merge them in with git merge origin/master
, assuming master
is your current branch.
Personally, I think that doing git fetch
and git merge
separately is generally a good idea.
Solution 2:
If you're not interested in the details that git diff
outputs, you can just run git cherry
which will output a list of commits your remote tracking branch has ahead of your local branch.
For example:
git fetch origin
git cherry master origin/master
Will output something like:
+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9
It indicates that there are two commits in my remote tracking branch that haven't been merged into my local branch.
This also works the other way:
git cherry origin/master master
It will show you a list of local commits that you haven't pushed to your remote repository yet.
Solution 3:
And another useful command to do this (after git fetch
) is:
git log origin/master ^master
This shows the commits that are in origin/master, but not in master.
You can also do it in the opposite way when doing git pull
to check what commits will be submitted to the remote.