2009-10-21 5 views
4

J'utilise git (en fait, msysgit) 1.6.4 sous Windows. La plupart du temps je travaille dans certaines branches. De temps en temps, je veux revenir à maîtriser pour sélectionner un commit particulier que j'ai fait dans ma branche de fonctionnalité - généralement parce que c'est un correctif utile qui a du sens, même sans la fonctionnalité. Mon flux de travail est comme ça - si cela est inutilement compliquée, s'il vous plaît me dire :-):Existe-t-il un moyen facile de passer à une branche précédemment active?

 
git checkout -b mycoolfeaturebranch 
// hack away, implementing a feature and one bugfix (while I'm at it) 

git add file_with_bugfix.cpp 
git commit -m "Fixed bug 12345 // commit the bugfix 
git checkout master    // hop over to master 
git cherry-pick     // bring the bugfix into master 

À ce stade, je veux habituellement hop revenir à ma branche fonction de poursuivre les travaux sur la fonction. Malheureusement, mes noms de branches tendent à devenir un peu longs (comme, 'mycoolfeaturebranch') et je n'ai pas de complétion de tabulation de nom de branche git sur Windows.

Y a-t-il peut-être quelque chose comme cd - sur les shells Unix (qui saute au répertoire précédent, utile pour basculer entre deux répertoires)? Un git checkout - serait génial. :-)

Répondre

4

De $ GIT/Documentation/relnotes-1.6.2.txt:

  • "git checkout -" est un raccourci pour "git checkout @ {- 1}".

Avez-vous essayé?

+0

Argh! Je l'ai essayé avec une ancienne version git, mais je ne l'ai pas réessayée depuis que j'ai mis à jour vers git 1.6.4. D'oh! Merci de l'avoir signalé! –

4

Essayez:

git checkout @{-1} 

De git rev-parse:

La construction spéciale @{-<n>} signifie la branche e vérifié avant l'actuel.


Comme mentionné par Stefan Näwe dans his answer:

"git checkout -" est un raccourci pour "git checkout @{-1}".

Même si la syntaxe @{-1} a été autour 1.6.2, il est seulement depuis 1.6.2 est pleinement efficace, comme Junio ​​Hamano C. Commentaires back in February 2009 (Souligné par l'auteur):

Le @ La syntaxe {-1} a été ajoutée longtemps avant que vous commenciez à devenir hyperactif ce tour, mais ce sera en 1.6.2 et a été annoncé comme "utilisable partout où vous pouvez utiliser un nom de branche", mais en réalité ce n'est pas .

J'ai réparé divers endroits pour correspondre à la réalité avec la demande.
Je fais travailler "git merge @{-1}" maintenant.


(Remarque: qui diffère de @{<n>}

A ref suivi du suffixe @ avec une spécification ordinal enfermé dans une paire de renfort (par exemple {1}, {15}) pour spécifier le n-ième valeur par défaut
Par exemple [email protected]{1} est la valeur précédente immédiate du maître alors que [email protected]{5} est la 5ème valeur antérieure du maître
Ce suffixe peut Ne doit être utilisé immédiatement après un nom de référence et l'arbitre doit avoir un journal existant ($ GIT_DIR/logs /).

Vous pouvez utiliser la @ construction avec une partie ref vide pour obtenir à un reflog de la branche actuelle.
Par exemple, si vous êtes sur la branche blabla, puis @{1} signifie la même chose que [email protected]{1}.

)

+0

Excellent! Fonctionne bien - malheureusement @ {- 1} est un peu ennuyeux à taper. Pour l'instant, j'ai créé un alias appelé 'git cc' qui fait un 'git checkout @ {- 1}'. Ou y a-t-il un moyen de faire 'git checkout -' un alias pour 'git checkout @ {- 1}'? –

+0

'git checkout -' fonctionne comme' git checkout @ {- 1} '. Le '@ {- 1}' est cas particulier du plus générique '@ {- n}', à savoir nième dernier vérifié branche. –

Questions connexes