Domanda Sposta il lavoro esistente, non impegnativo, in una nuova filiale in Git


Ho iniziato a lavorare su una nuova funzione e, dopo aver programmato per un po ', ho deciso che questa funzione doveva essere sulla stessa linea.

Come posso spostare le modifiche non salvate esistenti in un nuovo ramo e resettare quello attuale?

Voglio ripristinare il mio ramo corrente preservando il lavoro esistente sulla nuova funzione.


2506
2017-09-08 15:57


origine


risposte:


Utilizza il seguente:

git checkout -b <new-branch>

Questo lascerà il tuo attuale branch così com'è, crea e controlla un nuovo branch e manterrà tutte le tue modifiche. Puoi quindi eseguire un commit con:

git add <files>

e impegnarsi nel nuovo ramo con:

git commit -m "<Brief description of this commit>"

Le modifiche nella directory di lavoro e le modifiche organizzate nell'indice non appartengono ancora a nessun ramo. Questo cambia dove finiscono quei cambiamenti.

Non lo fai reset il tuo ramo originale, rimane così com'è. L'ultimo impegno <old-branch> sarà sempre lo stesso Quindi tu checkout -b e poi commettere.


2959
2017-09-08 15:59



In alternativa:

  1. Salva le modifiche correnti in una pila temporanea:

    $ git stash

  2. Crea un nuovo ramo basato su questa scorta e passa al nuovo ramo:

    $ git stash branch <new-branch> stash@{0}

Suggerimento: utilizzare il tasto tab per ridurre la digitazione del nome stash.


253
2018-06-19 00:18



Se hai fatto dei commit sul tuo ramo principale mentre hai codificato, ma ora vuoi spostare quei commit su un ramo diverso:

  1. Copia la tua cronologia corrente su una nuova diramazione, portando anche le eventuali modifiche non vincolanti:

    git checkout -b <new-feature-branch>
    
  2. Ora forza il ramo "disordinato" originale a tornare indietro: (senza passare ad esso)

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

    Per esempio:

    git branch -f master origin/master
    

    o se avessi fatto 4 commit:

    git branch -f master HEAD~4
    

Avvertimento: Sembra che git branch -f master origin/master volere resettare le informazioni di tracciamento per quel ramo. Quindi se hai configurato il tuo master ramo per spingere da qualche altra parte origin/master allora quella configurazione andrà persa.

Un'alternativa è da usare questa tecnica di ripristino. Ma quelle istruzioni elimineranno tutte le modifiche non salvate che hai. Se vuoi mantenerli, mettili al riparo e sfoltali alla fine.


35
2018-02-12 07:44



Se lo si commette, è anche possibile selezionare il singolo ID di commit. Lo faccio spesso quando inizio a lavorare in master, e poi voglio creare un ramo locale prima di spingere fino alla mia origine /.

git cherry-pick <commitID>

C'è molto che puoi fare con cherry-pick, come descritto Qui, ma questo potrebbe essere un caso d'uso per te.


15
2017-11-30 20:58