Domanda

Io avevo iniziato a lavorare su una nuova funzionalità, e dopo che codifica per un po', ho deciso che questa caratteristica dovrebbe essere sulla propria filiale.

Come faccio a spostare l'esistente, le modifiche non salvate in un nuovo ramo e il reset del mio attuale?

Voglio ripristinare il mio codice attuale, pur preservando gli attuali lavori alla nuova funzione.

È stato utile?

Soluzione

Utilizza il seguente:

git checkout -b <new-branch>

Questo lascerà la vostra filiale corrente come è, creare e checkout un nuovo ramo e mantenere tutte le modifiche. È quindi possibile effettuare un commit con:

git add <files>

e impegnarsi per il vostro nuovo ramo con:

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

I cambiamenti nella directory di lavoro e le modifiche in scena dell'indice non appartengono ad alcun ramo ancora. Questo cambia se tali modifiche sarebbero finiti in.

Non ripristinare la filiale originale, rimane così com'è. L'ultima commit sul <old-branch> sarà ancora lo stesso. Pertanto è checkout -b e quindi eseguire il commit.

Altri suggerimenti

In alternativa:

  1. Salvare le modifiche a un temp stash:

    $ git stash

  2. Creare un nuovo ramo basato su questa scorta, e passare al nuovo ramo:

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

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

Se sono state facendo commit sul ramo principale, mentre si codificati, ma ora si desidera spostare questi si impegna a un ramo diverso:

  1. Copia la cronologia di corrente su un nuovo ramo, portando con sé eventuali modifiche non troppo:

    git checkout -b <new-feature-branch>
    
  2. Ora forzare il ramo originale "disordinato" eseguire il rollback: (senza passare ad esso)

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

    Ad esempio:

    git branch -f master origin/master
    

    o se si fosse effettuato 4 commit:

    git branch -f master HEAD~4
    

Attenzione: Sembra che git branch -f master origin/master sarà ripristinare le informazioni di verifica per quel ramo. Quindi, se si è configurato il ramo master a spingere per un posto diverso da origin/master allora tale configurazione sarà persa.

Un'alternativa è quella di utilizzare questo ripristino tecnica . Ma tali istruzioni saranno scartare le modifiche non si hanno. Se si desidera mantenere quelli, riporre loro in primo luogo e li unstash alla fine.

Lo scenario comune è il seguente: Ho dimenticato di creare la nuova filiale per la nuova funzione, e stavo facendo tutto il lavoro nel vecchio ramo di caratteristica. Ho commesso tutto il lavoro "vecchio" al ramo principale, e voglio che il mio nuovo ramo di crescere dal "maestro". Non ho fatto un unico commit del mio nuovo lavoro. Ecco la struttura delle filiali: "Master" -> "Old_feature"

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

Se si impegnano, si potrebbe anche cherry-pick il singolo commit ID. Lo faccio spesso quando comincio a lavorare in master, e poi voglio creare una filiale locale prima di spingere fino alla mia origine /.

git cherry-pick <commitID>

C'è un sacco che si può fare con cherry-pick, come descritto qui , ma questo potrebbe essere un caso d'uso per voi.

@Robin risposta e messa in vendita di tutto ciò che ho fatto,

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

Se il pronti contro termine ha più di una scorta, vedere quale applicare al nuovo ramo:

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

e ispezionare la scorta individuale,

git stash show stash@{1}

o ispezionare tutti i nascondigli in una volta:

git stash list -p

V'è in realtà un modo molto semplice per fare questo con GitHub Desktop ora che io non credo fosse una caratteristica prima.

Tutto quello che dovete fare è passare alla nuova filiale in GitHub Desktop, e vi verrà chiesto di lasciare le modifiche sul ramo corrente (che sarà messo da parte), o per portare le modifiche con voi per la nuova filiale. Basta scegliere la seconda opzione, per portare le modifiche al nuovo ramo. È quindi possibile impegnarsi come al solito.

GitHub Desktop

Questo può essere utile per tutti che utilizzano strumenti per GIT

Comando

ramo Switch - si sposterà le modifiche al nuovo ramo. Poi si può commettere modifiche.

 $ git checkout -b <new-branch>

TortoiseGit

tasto destro del mouse sul repository e quindi utilizzare TortoiseGit-> Switch / Checkout

entrare descrizione dell'immagine qui entrare descrizione dell'immagine qui

SourceTree

Con il pulsante "Acquista" per passare ramo. Si vedrà il pulsante "cassa" in alto dopo aver fatto clic su un ramo. I cambiamenti dal ramo corrente verranno applicate automaticamente. Poi si possono commettere.

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top