Come eseguire il commit delle modifiche in un nuovo ramo


151

Ho appena apportato modifiche a un ramo. Come posso eseguire il commit delle modifiche nell'altro ramo?

Sto cercando di usare:

git checkout "the commmit to the changed branch" -b "the other branch"

Tuttavia, non penso che questa sia la cosa giusta da fare, perché in questo caso sto creando un nuovo ramo invece di eseguire il commit delle modifiche in "l'altro ramo".

Dovrei usare invece il seguente comando?

git merge "the other branch"

Solo un commit o più?
Carl Norum,

Risposte:


269

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Innanzitutto, controlla la tua nuova filiale. Quindi aggiungere tutti i file che si desidera impegnare nella gestione temporanea. Infine, esegui il commit di tutti i file che hai appena aggiunto. Potresti voler fare una cosa git push origin your-new-branchsuccessiva in modo che le tue modifiche vengano visualizzate sul telecomando.


1
da quando ho ricevuto il nuovo ramo da git checkout v3.0 (il ramo prima di apportare le modifiche) nuovo ramo, devo ancora usare "git add <files>"?
user1988385

Puoi fare un git statusper vedere cosa è attualmente in scena e cosa no.
John Brodie,

5
Perché entrambi git adde git commit -a?
Carl Norum,

11
Non è git checkout -b your-new-branchinvece di git checkout your-new-branch?
Schrodinger

1
che ne dici se ho già rintracciato un file e voglio passare a un nuovo ramo aggiungere quei file al ramo appena creato?
ass-king alcune domande

58

Se non hai effettuato modifiche

Se le modifiche sono compatibili con l'altro ramo

Questo è il caso della domanda perché l'OP vuole impegnarsi in un nuovo ramo e si applica anche se le modifiche sono compatibili con il ramo di destinazione senza innescare una sovrascrittura.

Come nella risposta accettata da John Brodie, puoi semplicemente controllare la nuova filiale e impegnare il lavoro:

git checkout -b branch_name
git add <files>
git commit -m "message"

Se le modifiche non sono compatibili con l'altro ramo

Se viene visualizzato l'errore:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Quindi puoi riporre il tuo lavoro, creare un nuovo ramo, quindi inserire le modifiche allo stash e risolvere i conflitti:

git stash
git checkout -b branch_name
git stash pop

Sarà come se avessi apportato tali modifiche dopo aver creato il nuovo ramo. Quindi puoi impegnarti come al solito:

git add <files>
git commit -m "message"

Se hai apportato modifiche

Se si desidera mantenere gli commit nel ramo originale

Vedi la risposta di Carl Norum con cherry-picking, che è lo strumento giusto in questo caso:

git checkout <target name>
git cherry-pick <original branch>

Se non si desidera mantenere gli commit nel ramo originale

Vedi la risposta di joeytwiddle su questo potenziale duplicato . Seguire uno dei passaggi precedenti come appropriato, quindi ripristinare il ramo originale:

git branch -f <original branch> <earlier commit id>

Se hai trasferito le tue modifiche su un telecomando condiviso come GitHub, non dovresti tentare questo rollback a meno che tu non sappia cosa stai facendo.


3
Tutti dovrebbero provare questo codice. Poiché la maggior parte delle persone che cercano la risposta, hanno già apportato alcune modifiche al codice esistente.
Sushin Pv

2
Perché hai aggiunto lo stash e lo stash pop? Quando effettui il checkout di una nuova filiale, le modifiche saranno disponibili per l'aggiunta e il commit, senza bisogno di riporre.
Tristan,

@Tristan Hai ragione nel caso in cui le modifiche siano compatibili e i file non vengano sovrascritti. Altrimenti, ricevo error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.Vuoi scrivere una nuova risposta o modificare la mia risposta? Altrimenti, posso modificarlo da solo.
miguelmorin,

Ok, hai perfettamente ragione. Penso che dovresti completare la tua risposta, per mostrare ciò che porta oltre alla risposta accettata.
Tristan,

@Tristan L'ho fatto. L'OP stava chiedendo una nuova filiale, nel qual caso la risposta accettata è quella giusta. Tengo la mia come altre persone hanno trovato utile la mia risposta. È diventata una risposta lunga e sono felice di modificare con qualsiasi feedback.
miguelmorin,

24

Se ho capito bene, hai fatto un commit changed_branche vuoi copiarlo other_branch? Facile:

git checkout other_branch
git cherry-pick changed_branch

5
Questa è la risposta giusta per quello che sta cercando di realizzare.
Sean,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.