COMMIT sélectionnez des modifications à une autre branche, puis reprendre le travail sur la branche actuelle?

StackOverflow https://stackoverflow.com/questions/3871512

Question

Cela se produit souvent dans mon flux de travail: Je travaille sur une fonctionnalité dans une branche séparée, et en faisant cela, je vais venir à travers de petites choses qui ont besoin de fixation, mais sont de plus haut dans la mise en page de cadre ou d'un site par exemple .

Je veux revenir à la principale développer branche et valider les modifications de fichiers sélectionnez là, puis revenir à une fonction branche et rebase pour que je puisse continuer là avec les tweaks sans rapport avec / corrections de bogues de la route.

J'utilise git stash et git stash pop de le faire, mais je reçois beaucoup de conflits d'un tas de fichiers que je modifed mais ne pas besoin d'être commis à la branche mère de toute façon.

Y at-il une autre façon d'éviter les conflits ou en quelque sorte sauver l'état actuel, et ne tirez sélectionner les changements d'arbre de travail à une autre branche pour commiting? (Un peu comme git-stash-cerise choisir; -))

Était-ce utile?

La solution

  1. Valider les modifications que vous voulez dans master sur votre branche actuelle.
  2. Stash vos modifications restantes
  3. Passez à la branche de master et l'utilisation git cherry-pick pour déplacer les changements sur master
  4. Reculer à votre succursale de plumes et rebase (en option)
  5. Unstash les modifications apportées aux fonctionnalités originales

Autres conseils

Je fais habituellement ce l'inverse. Je continue à travailler dans ma branche de fonction jusqu'à ce que je suis prêt à faire là-bas commettras. Dès que je suis, j'ajouter tous les changements qui appartiennent à la nouvelle engager pour la branche à l'index, mais pas ceux qui appartiennent au maître. git add -p faire et.al ce vraiment facile. Une fois que tous les changements pertinents dans l'index, je livre à la branche. Tous les autres changements de sales restants appartiennent à maître et seront entraînés très bien une fois que je passe à ce que je puisse commettre là.

Essayez de revenir au master branche en utilisant l'option --merge. Il va essayer de faire une fusion à trois entre les deux branches. La documentation git a un bon exemple:

2. After working in the wrong branch, switching to the correct
   branch would be done using:

      $ git checkout mytopic

   However, your "wrong" branch and correct "mytopic" branch
   may differ in files that you have modified locally, in which 
   case the above checkout would fail like this:

      $ git checkout mytopic
      error: You have local changes to 'frotz'; not switching branches.

   You can give the -m flag to the command, which would try a
   three-way merge:

      $ git checkout -m mytopic
      Auto-merging frotz

   After this three-way merge, the local modifications are not
   registered in your index file, so git diff would show you what
   changes you made since the tip of the new branch.

Sur MacOS, GitX il est très facile de faire le genre de commettre sélectif rafl décrit, de sorte que c'est un une bonne façon de l'aborder si c'est l'environnement que vous êtes.

Il est également possible / pratique pour valider les modifications de la branche-y et des changements de maître-y dans des livraisons séparées, puis utilisez git format-patch pour exporter les commits de la branche sous forme de fichiers et git am pour les tirer pour le maître.

Le danger ici est de savoir si les fichiers autour des changements sont trop différents, dans ce cas, il peut y avoir des conflits en tirant les commits pour le maître.

Qu'en est-il la création d'une branche temporaire?

Quelque chose comme:

- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top