Commit selezionare modifiche a un altro ramo per poi riprendere il lavoro sul ramo attuale?
-
28-09-2019 - |
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; -))
Soluzione
- confermare le modifiche che si desidera in
master
sul ramo corrente. - Stash tuoi restanti modifiche
- Passare al ramo
master
e usogit cherry-pick
per spostare le modifiche sulmaster
- Spostare di nuovo al vostro ramo di piume, e
rebase
(opzionale) - 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