Basculer vers une autre branche sans modifier les fichiers d'espace de travail
J'ai cloné un dépôt git à partir de GitHub, fait quelques changements et quelques révisions; j'ai fait pas mal et tous sont très sales, ils ne sont donc pas adapté pour un pull request. Maintenant, j'ai créé la direction de la cleanchanges
de origin/master
, donc c'est propre, et je veux consacrer mon des modifications, comme un commit avec une belle commettre commentaire.
Quand je suis sur le maître local, je veux passer à mon cleanchanges
, mais sans changer les fichiers. Et puis je suis capable de commettre.
Comment puis-je changer de branches sans modifier les fichiers?
Je veux être clair: j'ai tous les changements commis dans les locaux master
. Il n'y a pas des modifications non validées.
Vous devez vous connecter pour publier un commentaire.
Edit: je viens de remarquer que tu disais que tu avais déjà créé quelques révisions. Dans ce cas, utilisez
git merge --squash
pour en faire un seul commit:(Edit: La réponse suivante s'applique si vous avez non validées les modifications).
Il suffit de passer les branches avec
git checkout cleanchanges
. Si les branches se réfèrent à la même ref, alors toutes vos modifications non validées seront conservés dans votre répertoire de travail lorsque vous basculez.Le seul moment où l'on aurait un conflit est si certains fichier dans le référentiel est différent entre
origin/master
etcleanchanges
. Si vous venez de créer la branche, alors pas de problème.Comme toujours, si vous êtes à tous les intéressés sur la perte de travail, faites une copie de sauvegarde d'abord. Git est conçu pour ne pas jeter de travail sans vous demander d'abord.
Git. Passer à une autre branche de la
Le meilleur pari est de stash les changements et l'interrupteur de la branche. Pour la commutation de branches, vous avez besoin d'un état propre. Donc les ranger, commander une nouvelle branche et appliquer les modifications sur la nouvelle branche et commettre
Il semble que vous faites des changements, en les engageant à maîtriser le long du chemin, et maintenant vous souhaitez les combiner en une seule commettre.
Si donc, vous voulez rebase vos commits, les écraser en un seul commit.
Je ne suis pas entièrement sûr de ce que vous souhaitez exactement, donc je ne vais pas tenter de vous avec un script. Mais je vous suggère de lire sur
git rebase
et les options pour "squash"ing, et d'essayer quelques choses.Une autre façon, si vous souhaitez créer un nouveau commit au lieu d'effectuer une opération de fusion:
La première (dur) réinitialisation de définir votre arbre de travail pour le même que le dernier commit dans
master
.La deuxième réinitialiser va mettre votre TÊTE en arrière où il était, pointant à la pointe de la
cleanchanges
branche, mais sans modifier les fichiers. Alors maintenant, vous pouvez ajouter et valider.Par la suite, si vous souhaitez supprimer le sale vous engage fabriqués à partir de
master
(et en supposant que vous ne l'avez pas déjà poussé), vous pouvez:Cela annulera toutes vos nouvelles s'engage, en retour de votre local
master
branche de la même livraison que celui dans le référentiel.Façon la plus simple de le faire est comme suit:
Pourquoi ne pas simplement
git reset --soft <branch_name>
?Démonstration:
Résultat:
Une chose à noter est que l'actuel modifications de la branche de
original
. Vous êtes toujours à gauche dans la branche précédents après le processus, mais on peut facilementgit checkout original
, parce que c'est le même état. Si vous ne voulez pas perdre la précédenteHEAD
, vous ne devriez noter que la validation de référence et negit branch -f <previous_branch> <commit>
après.