Mild Fuzz
Mild Fuzz

Reputation: 30701

GIT diff giving me different feedback than git merge

when I run

git diff FETCH_HEAD

it lists a load of expected changes, since I fetched the updated version from my remote.

BUT....

when I run

git merge FETCH_HEAD

it tells me all is up to date!!

Where am I going wrong?

Upvotes: 3

Views: 348

Answers (1)

Alex Brown
Alex Brown

Reputation: 42872

Why is FETCH_HEAD different from the HEAD, after a merge?

A merge creates a new commit, containing all the changes from the original HEAD, now ORIG_HEAD and the FETCH_HEAD. This means that if your original HEAD contained changes not contained in FETCH_HEAD, then the new (merged) HEAD will be different from FETCH_HEAD since it contains those commits as well.

Thing to check

It's possible your current branch is already up-to-date with the FETCH_HEAD from a previous fetch, for the above reason, or for another reason.

To check this, get the sha (hex number) from your fetch head as follows:

git log -1 FETCH_HEAD
commit bec5aadef68a5d29c9d523358a0189b86cad4c82
Author: Alex Brown <alex@XXX>
Date:   Tue Nov 16 10:05:19 2010 +0000

    weather report

and copy the first 6 digits of the FETCH_HEAD: bec5aa

next, search for this sha in the ancestry of your head

git log HEAD | grep "commit bec5aa" -A 5

commit bec5aadef68a5d29c9d523358a0189b86cad4c82
Author: Alex Brown <alex@XXX>
Date:   Tue Nov 16 10:05:19 2010 +0000

    weather report

if this returns anything but blank, the FETCH_HEAD has already been merged. Any differences you see are in the current HEAD, which may be the merged HEAD (or a descendant).

*Example to demonstrate this"

cd /tmp
mkdir 1
cd 1
git init
echo "Woo" > a.txt
git add a.txt 
git commit -m "first commit"
cd ..
git clone 1 2
cd 1
echo "Its nice today" >> a.txt
git commit -a -m "weather report"
cd ..
ls
cd 2
ls
echo "Like peas in a pod" > b.txt
git add b.txt 
git commit -m "sayings"
git fetch
git diff FETCH_HEAD
git merge FETCH_HEAD
git diff FETCH_HEAD

Upvotes: 2

Related Questions