2010-11-16 3 views
3

quand je lanceGIT diff me donner différents commentaires que git fusionner

git diff FETCH_HEAD 

il énumère une charge de changements attendus, puisque je la version mise à jour allé chercher de ma télécommande.

MAIS ....

quand je lance

git merge FETCH_HEAD 

il me dit tout est à jour !!

Où est-ce que je me trompe?

+1

Avez-vous des changements Unstaged? Consultez' status' git. Et essayez 'git diff HEAD FETCH_HEAD' pour éviter la comparaison avec votre arbre de travail actuel. –

+0

rien à commettre , et git diff HEAD FETCH_HEAD me donne encore beaucoup de différences –

Répondre

2

Pourquoi FETCH_HEAD est-il différent de HEAD, après une fusion?

Une fusion crée un nouveau commit, contenant tous les changements de la HEAD d'origine, maintenant ORIG_HEAD et FETCH_HEAD. Cela signifie que si votre HEAD d'origine contenait des modifications non contenues dans FETCH_HEAD, le nouveau (fusionné) HEAD sera différent de FETCH_HEAD car il contient également ces validations.

chose à vérifier

Il est possible que votre branche actuelle est déjà à jour avec le FETCH_HEAD d'une précédente Fetch, pour la raison ci-dessus, ou pour une autre raison.

Pour vérifier cela, obtenir le sha (nombre hexadécimal) de votre chercher la tête comme suit:

git log -1 FETCH_HEAD 
commit bec5aadef68a5d29c9d523358a0189b86cad4c82 
Author: Alex Brown <[email protected]> 
Date: Tue Nov 16 10:05:19 2010 +0000 

    weather report 

et copiez les 6 premiers chiffres du FETCH_HEAD: bec5aa

suivant, recherche pour cette sha dans l'ascendance de votre tête

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

commit bec5aadef68a5d29c9d523358a0189b86cad4c82 
Author: Alex Brown <[email protected]> 
Date: Tue Nov 16 10:05:19 2010 +0000 

    weather report 

si cela renvoie quelque chose mais vide, le FETCH_HEAD a déjà été fusionné. Toutes les différences que vous voyez sont dans le HEAD actuel, qui peut être le HEAD fusionné (ou un descendant).

* Exemple de démontrer cette »

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 
+0

Donc, ce que vous dites est que ma tête locale est en fait en avance de mon FETCH_HEAD de ma télécommande? –

+1

Pour vérifier si votre 'FETCH_HEAD' est déjà inclus dans votre' HEAD' , vous pouvez appeler 'git log HEAD..FETCH_HEAD' Ceci affichera toutes les validations dans' FETCH_HEAD' qui ne sont pas déjà incluses dans 'HEAD' Si la sortie est vide, il n'y a rien à fusionner. en utilisant un outil graphique comme gitk. –

+0

@MildFuzz - c'est une explication possible de ce que vous voyez. –