Commit selezionare modifiche a un altro ramo per poi riprendere il lavoro sul ramo attuale?

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

Domanda

Questo accade spesso nel mio flusso di lavoro: sto lavorando su una caratteristica in un ramo separato, e mentre si fa questo mi imbatto in piccole cose che la fissazione di bisogno, ma sono da più in alto nel quadro o un sito di layout per esempio .

Voglio tornare alla principale sviluppare ramo e commettere le modifiche da selezionare i file lì, per poi tornare ad un caratteristica ramo, e REBASE in modo che io possa continuare lì con i ritocchi non collegati / Correzione degli errori fuori strada.

Sto usando git stash e git stash pop per fare questo, ma sto ricevendo un sacco di conflitti da un gruppo di file che modifed ma non è necessario essere impegnati al ramo genitore in ogni caso.

C'è un altro modo per evitare o conflitti in qualche modo salvare lo stato corrente, e tirare solo selezionare modifiche albero di lavoro ad un altro ramo per commettere? (Un po 'come git-nascondiglio-cherry-pick; -))

È stato utile?

Soluzione

  1. confermare le modifiche che si desidera in master sul ramo corrente.
  2. Stash tuoi restanti modifiche
  3. Passare al ramo master e uso git cherry-pick per spostare le modifiche sul master
  4. Spostare di nuovo al vostro ramo di piume, e rebase (opzionale)
  5. Unstash modifiche alle funzionalità originali

Altri suggerimenti

Io di solito faccio il contrario. Io continuo a lavorare nel mio ramo della funzione fino a quando io sono pronto a fare un commit lì. Non appena mi sono, io aggiungo tutte le modifiche che appartengono nella nuova impegnarsi per la filiale per l'indice, ma non quelli che appartengono in master. git add -p et.al marca che veramente facile. Una volta che tutte le modifiche rilevanti dell'indice, mi impegno al ramo. Tutte le restanti modifiche rimanenti sporchi appartengono al padrone e saranno effettuate lungo proprio bene una volta posso passare a quel modo che io possa commettere lì.

Provare a passare di nuovo al ramo master utilizzando l'opzione --merge. Si cercherà di fare una fusione a tre vie tra i due rami. La documentazione Git ha un buon esempio:

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.

In MacOS, GitX rende molto facile per fare il tipo di commettere selettivo Rafl descrive, in modo che un buon modo per avvicinarsi, se questo è l'ambiente in cui ci si trova.

E 'anche possibile / pratico per commettere modifiche del ramo-y e cambiamenti di master-y in commit separati, quindi utilizzare git format-patch per esportare i commit dal ramo come file e git am per tirarli dentro al master.

Il pericolo qui è se i file intorno i cambiamenti sono troppo diversi, nel qual caso ci possono essere conflitti quando si tira i commit nel al master.

Che dire di creare un ramo temporaneo?

Qualcosa di simile:

- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top