2009-08-18 6 views
2

Je suis intrigué de savoir comment utiliser les branches dans git pour économiser du travail temporaire.git enregistrer des instantanés avec des branches

C'est ce que j'ai essayé:

/tmp/gt > git init 
Initialized empty Git repository in .git/ 
/tmp/gt > date > t 
/tmp/gt > git add t 
/tmp/gt > git commit -m 'initial' 
Created initial commit b722fde: initial 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 t 

Maintenant, je sauve loin que le travail à la branche « b ».

/tmp/gt > git branch b 

et continuer à fonctionner dans la branche principale.

/tmp/gt > date >> t 
/tmp/gt > cat t 
Di 18 Aug 2009 08:52:43 CEST 
Di 18 Aug 2009 08:53:13 CEST 

Ce qui me surprend est la suivante:

/tmp/gt > git checkout b 
M  t 
Switched to branch "b" 
/tmp/gt > cat t 
Di 18 Aug 2009 08:52:43 CEST 
Di 18 Aug 2009 08:53:13 CEST 

Je pensais que dans la branche « b » le fichier « t » était toujours dans le même état quand la branche a été créée (c.-à-containg juste ligne de date unique). Puis-je éviter cette fusion automatique ou s'agit-il d'une question conceptuelle?

Merci pour vos conseils, Axel.

Répondre

4

La logique est que vos modifications non-planifiées ne sont (encore) sur aucune branche. Si vos modifications ne sont pas en conflit avec le commutateur de branche que vous demandez, vous pouvez les transférer sur la nouvelle branche. Si vous souhaitez revenir exactement à la branche b, vous devez vous assurer que vous disposez d'un arbre de travail propre en validant les modifications en attente, en conservant les modifications en attente ou en réinitialisant les modifications en attente, puis en changeant les branches.

La raison pour laquelle le comportement est comme ceci est de soutenir le flux de travail très commun: commencer à pirater, réaliser des hacks sur une branche alternative (ou nouvelle), créer et quitter une branche, continuer le piratage.

3

c'est intentionnel: toutes vos modifications actuelles à votre copie de travail seront fusionnées. Si vous faites un autre commit sur master, puis sur checkout b, vous aurez le fichier oneliner.

Une autre solution est de git checkout -f b, mais écrase vos modifications, qui vous ne voulez pas habituellement

0
git reset --hard 

rétablira l'état que Git a stocké, donc si vous appelez après votre « git checkout b "Ligne t sera restauré à son état vierge.

+0

Mais si je retourne à la branche "master", la modification est perdue. Je suppose que je dois toujours être conscient de cela et faire un commit avant de vérifier une branche. – axelrose

Questions connexes