git - guide - Passare a un altro ramo senza modificare i file dello spazio di lavoro



git push (4)

Ho clonato un repository git da GitHub, ho apportato alcune modifiche e un po 'di commit; Ho fatto parecchio e sono tutti abbastanza sporchi, quindi non sono adatti per una richiesta di pull. Ora ho creato i cleanchanges del ramo da origin/master , quindi è pulito, e voglio commettere le mie modifiche lì come un commit con un bel commento di commit.

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

Come posso cambiare ramo senza cambiare file?

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


Answer #1

Il modo più semplice di fare è il seguente:

git fetch && git checkout <branch_name>

Answer #2

La soluzione migliore è quella di stash le modifiche e cambiare ramo. Per cambiare ramo, hai bisogno di uno stato pulito. Quindi riponi gli oggetti, fai il checkout di un nuovo ramo e applica le modifiche sul nuovo ramo e esegui il commit


Answer #3

Un altro modo, se vuoi creare un nuovo commit invece di eseguire un'unione:

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

git status
git add .
git commit

Il primo (hard) reset imposterà il tuo albero di lavoro allo stesso come l'ultimo commit nel master .

Il secondo reset riporta il cleanchanges nel punto in cui si trovava, indicando la punta del ramo cleanchanges , ma senza modificare alcun file. Quindi ora puoi aggiungerli e impegnarli.

Successivamente, se si desidera rimuovere i commit sporchi effettuati dal master (e supponendo che non li abbia già spinti), è possibile:

git checkout master
git reset --hard origin/master

Questo cancellerà tutti i tuoi nuovi commit, restituendo il tuo ramo master locale allo stesso commit di quello nel repository.


Answer #4

Edit: Ho appena notato che hai detto che avevi già creato alcuni commit. In tal caso, usa git merge --squash per fare un singolo commit:

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

( Modifica: la seguente risposta si applica se hai modifiche non eseguite ).

Basta cambiare rami con i 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 che si avrà un conflitto è se qualche file nel repository è diverso tra origin/master e cleanchanges . Se hai appena creato il ramo, allora nessun problema.

Come sempre, se sei del tutto preoccupato di perdere il lavoro, fai prima una copia di backup. Git è progettato per non buttare via il lavoro senza prima chiederlo.





git-branch