Mettre les modifications non validées chez Master vers une nouvelle branche par Git

Réponses:

151

Vous pouvez simplement vérifier dans la branche de test, puis vous engager. Vous ne perdez pas vos modifications non validées lorsque vous passez à une autre succursale.

En supposant que vous soyez dans la branche principale:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

Je ne suis pas vraiment sûr des fichiers supprimés, mais je suppose qu'ils ne sont pas inclus lorsque vous utilisez git add .

Samuel Carrijo
la source
12
Parfois, l'extraction échouera car vos modifications entrent en conflit avec cette branche. Vous pouvez essayer checkout -m pour fusionner.
Jouni K. Seppänen
2
J'ai essayé cela mais j'ai eu une erreur: erreur: vos modifications locales apportées aux fichiers suivants seraient écrasées lors du paiement. Veuillez valider vos modifications ou les cacher avant de pouvoir changer de branche.
ishwr
Bien que cela fonctionnera, la réponse qui dit que l'utilisation de la réserve devrait être préférée, l'OMI. Peut-être juste un choix personnel, mais c'est un flux de travail plus propre, logiquement et introduit STASH qui est une commande utile.
Patrick
L'option "-b" est manquante, car le titre suggère que la question concerne une "nouvelle" branche.
Guntram
195

Vous pouvez également créer une nouvelle branche et y basculer en faisant:

git checkout -b new_branch
git add .

J'utilise cela tout le temps car j'oublie toujours de démarrer une nouvelle branche avant de commencer à éditer du code.

Cygne
la source
3
même problème que @jouni noté pour l'autre réponse - vous pouvez rencontrer des difficultés pour fusionner la branche dans master si des modifications supplémentaires sont en conflit avec les modifications d'origine. IMO ce fil répond mieux à la question: stackoverflow.com/questions/556923/…
jpw
Bref, doux et rassurant ... "J'utilise ça tout le temps ..."
ϹοδεMεδιϲ
1
N'oubliez pas de faire un commit dans le new_branch. Si vous revenez à la branche principale et rétablissez les fichiers modifiés, vous les perdrez également dans la nouvelle branche.
petrsyn
36

Pourquoi ne pas simplement utiliser git stash. Je pense que c'est plus intuitif comme un copier-coller.

$ git branch
  develop
* master
  feature1
  TEST
$

Vous avez des fichiers dans votre branche actuelle que vous souhaitez déplacer.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Passez à l'autre branche.

$ git checkout TEST

Et postuler

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

J'aime aussi git stashparce que j'utilise git flow, ce qui se plaint lorsque vous voulez terminer une branche de fonctionnalité tout en ayant des modifications encore dans votre répertoire de travail.

Tout comme @Mike Bethany, cela m'arrive tout le temps car je travaille sur un nouveau problème en oubliant que je suis toujours sur une autre branche. Ainsi, vous pouvez stocker votre travail git flow feature finish..., et git stash applydans une nouvelle git flow feature start ...branche.

HeyWatchThis
la source
2
git stashest ma manière préférée de traiter les changements non engagés. C'est certainement une méthode intuitive quand on la considère comme du copier-coller.
Matthew Mitchell
Cela me semble une bonne approche. Cela a fonctionné sans problème.
Yunus Nedim Mehel
Je ne savais pas que vous pouviez le faire et cela a bien fonctionné. Se sent un peu plus intuitif que les autres méthodes.
glaucon
Je pense que cacher c'est une manière plus professionnelle, au lieu d'utiliser git checkout, puis d'ajouter. Je pense que votre réponse devrait être plus de 100 votes.
Matrosov Alexander
1
@ Καrτhικgit stash --include-untracked
2Toad
5
git checkout TEST
git add file1 file2
git commit
Bombe
la source