2011-12-27 14 views
43

Ho clonato un repository git da GitHub, ho apportato alcune modifiche e alcuni sono stati commessi; Ho fatto parecchio e sono tutti abbastanza sporchi, quindi non sono adatti per una richiesta di pull. Ora ho creato il ramo cleanchanges da origin/master, quindi è pulito, e voglio confermare le mie modifiche lì come un commit con un bel commento di commit.Passare a un altro ramo senza modificare i file dello spazio di lavoro

Quando sono sul master locale, voglio passare al mio cleanchanges ma senza modificare i file. E poi sono in grado di impegnarmi.

Come posso cambiare ramo senza cambiare file?

Voglio chiarire: ho effettuato tutte le modifiche nel locale master. Non ci sono modifiche non impegnate.

risposta

45

Modifica: Ho appena notato che hai detto che avevi già creato alcuni commit. In tal caso, utilizzare git merge --squash di fare un unico commit:

git checkout cleanchanges 
git merge --squash master 
git commit -m "nice commit comment for all my changes" 

(Edit:. La risposta seguente si applica se avete uncommitted modifiche)

basta passare rami con git checkout cleanchanges. Se i rami si riferiscono allo stesso riferimento, tutte le modifiche non salvate verranno mantenute nella directory di lavoro quando si passa.

L'unica volta in cui si verificherà un conflitto è se un file nel repository è diverso tra origin/master e cleanchanges. Se hai appena creato il ramo, allora nessun problema.

Come sempre, se si è affatto preoccupati di perdere il lavoro, eseguire prima una copia di backup. Git è progettato per non buttare via il lavoro senza prima chiederlo.

+0

Ho effettuato tutte le modifiche. – amorfis

+0

In tal caso, vedere la mia risposta aggiornata. –

6

La soluzione migliore è a stash le modifiche e passare ramo. Per cambiare ramo, hai bisogno di uno stato pulito. Quindi mettili, verifica un nuovo ramo e applica le modifiche sul nuovo ramo e esegui il commit

+2

Non è necessario uno "stato pulito" per cambiare ramo. –

+0

Il problema è che le modifiche sono già in corso. – amorfis

+1

Quindi è possibile unire le modifiche da un altro ramo. – vivek85

1

Sembra che tu abbia apportato delle modifiche, affidandole al master lungo il percorso e ora desideri combinarle in un singolo commit.

In tal caso, si desidera eseguire il commit di rebase in un singolo commit.

Non sono del tutto sicuro di cosa esattamente tu voglia, quindi non ti tenterò con una sceneggiatura. Ma ti suggerisco di leggere su git rebase e le opzioni per "squash" e provare alcune cose.

1

Un altro modo, se si desidera creare un nuovo commit invece di eseguire un merge:

git checkout cleanchanges 
git reset --hard master 
git reset cleanchanges 

git status 
git add . 
git commit 

Il primo reset (duro) imposterà il vostro albero di lavoro per lo stesso come l'ultimo impegno in master.

Il secondo reset riporterà la TESTA nel punto in cui si trovava, puntando alla punta del ramo cleanchanges, ma senza modificare alcun file. Quindi ora puoi aggiungerli e impegnarli.


In seguito, se si desidera rimuovere lo sporco impegna hai fatto da master (e supponendo che non l'hai già li spinse), si potrebbe:

git checkout master 
git reset --hard origin/master 

Ciò scarta tutti i nuovi commit, restituendo il ramo locale master allo stesso commit di quello nel repository.

21

Git. Passare ad un altro ramo

git checkout branch_name 
+11

questo cambierà i file dell'area di lavoro ad eccezione dei file non tracciati – SMR

+0

aregato gonsaymasu. grazie. –

Problemi correlati