Comment créer une nouvelle branche et déplacer le code existant n'
Disons que je commence à travailler sur clair master
branche - no changes to commit
.
Faire quelques changements locaux, mais se rendre compte que ces modifications doivent être dans un autre branch
au lieu de master
.
Est-il un moyen comment déplacer cela change à nouveau séparée branch
et de reformuler master
branche en état de no changes to commit
?
MODIFIER
À la suite de la accepté de répondre pour git ramification - comment faire de maître actuel d'une branche et ensuite revenir maître retour à la version précédente? ...en suivant les étapes, mon maître aura encore des fichiers modifiés.Voir la dernier commentaire 7.
Ne me manque quelque chose ?
$ git branch # 1. starting on master
# On branch master
nothing to commit, working directory clean
# On branch master # 2.modifying a file
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash # 3. stashing changes
Saved working directory and index state WIP on master: 393bfad initial commit
HEAD is now at 393bfad initial commit
$ git status
# On branch master
nothing to commit, working directory clean
$ git checkout -b experiment # 4. creating new branch experiment
Switched to a new branch 'experiment'
$ git stash pop # 5. pop staged changes in exper.
# On branch experiment
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (16b6871d43f367edd03f59558eca4163cd1a2b2f)
$ git checkout master #6. going back to master
M test.txt
Switched to branch 'master'
git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: test.txt #7. in master test.txt is still modified !!!
double possible de git ramification - comment faire de maître actuel une branche et revenir ensuite maître de retour à la précédente version?
OriginalL'auteur | 2013-10-13
Vous devez vous connecter pour publier un commentaire.
Après vous
git stash pop
, vous devez vous engager à la nouvelle branche. Juste avant de s'engager vérifiermaster
.Considérer la séquence suivante. Depuis le début (c'est à dire, vous êtes dans la branche master avec local unstaged changements dans le répertoire de travail), vous pourriez faire:
L'avantage de la cachette/pop est qu'il ne l' 'ajouter' pour vous et vous n'avez pas besoin de spécifier les fichiers qui sont modifiés. Mais vous avez encore le besoin de s'engager sur la nouvelle branche.
OriginalL'auteur William Pursell
l'utilisation de git stash
et git stash pop à la nouvelle branche
OriginalL'auteur Oriely
Je n'ai pas testé (et je ne suis pas un git gourou qui devrait être aveuglément confiance), mais après avoir lu les accrocher (http://git-scm.com/book/en/Git-Tools-Stashing) il me semble que les commandes suivantes peuvent être le meilleur.
OriginalL'auteur Alex Lauerman
Si vous n'avez pas commis quoi que ce soit, il n'est pas un problème pour aller avec
git stash
. Si vous avez déjà fait quelques révisions (et vous devriez vraiment)git stash
ne va pas aider. Dans ce cas, le plus simple est:git branch -m feature-xy
.git pull --rebase
à intégrer les éventuels changements en amont.git push -u feature-xy:feature-xy
(Note de l'-u
vous mettre à jour en amont de la branche.)git checkout master
(Comme il n'y a pas de maître local plus, git va créer un nouveau à partir de l'amont.)Si vous avez déjà fait quelques engage simplement de renommer cette branche est bien plus facile que la réinitialisation de votre pointeurs. Penser de cette façon: Vous travaillez sur une fonction, d'où l'engage appartiennent à cette fonctionnalité. Par conséquent, il n'est consécutive à un nom de branche de cette façon.
Même pour la complexité:
git branch -m
vsgit stash;git checkout -b;git stash pop
- le résultat est Le même.Ce que vous avez fait est de répondre à une question différente. L'comparables commandes sont par exemple
git checkout -b foo; git commit -v whatever
. Lorsque vous renommez une branche de renommer l'ensemble de la direction de config; La nouvelle direction va le pousser à maîtriser (si il y est une distance); Tout git opération qui s'attend à ce maître d'exister va échouer jusqu'à ce qu'il est recréé;git checkout master
échouera si il y a 0 ou 2+ télécommandes avec une branche de maître; Tout unpushed s'engage sur le master sera "manquant", en tant que maître === origin/master; Toutes les modifications de configuration pour le master sera perdu. En bref: Il existe d'importantes possibilités pour poser des problèmes.OriginalL'auteur michas