Prendi tutte le mie modifiche sul ramo corrente e spostale in un nuovo ramo in Git


105

Ho iniziato a lavorare su quella che pensavo sarebbe stata una correzione di bug minori nel mio ramo principale. Tuttavia, è andato fuori controllo al punto in cui avrei voluto creare un ramo separato per fare lo sviluppo in primo luogo.

Quindi in questo momento quello che vorrei fare è:

  1. Crea un nuovo ramo chiamato (diciamo) "edge"
  2. Sposta tutti i file modificati / non tracciati dal master al bordo (in modo che il master non sia cambiato da quando ho iniziato la correzione del bug)
  3. Finisci il mio lavoro al limite, unisci di nuovo al master

Come posso fare questo?

Risposte:


103

Se non hai ancora commesso nulla, sei già nella posizione giusta.

  1. Crea un nuovo ramo: git checkout -b edge
  2. I tuoi file non sono cambiati. Proprio git addquello che deve e impegnarsi come al solito.
  3. Quando hai finito di impegnarti edge, torna a mastercon git checkoute git merge edge.

Non avevo ancora commesso nulla, quindi quella prima riga è stata una vista gradita ... phew, in realtà è stato abbastanza indolore :-)
Drenai

87

Per aggiungere alla risposta di JB, se hai già iniziato a fare alcuni commit sul master per quello che è finito per essere uno sforzo "edge", potresti:

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply

lo stash wrapper non è strettamente necessario, ma solo per modifiche di lavoro non impegnate, giusto?
AvereAGuess

4
@HaveAGuess right. Con "prendi tutte le mie modifiche", ho incluso anche le modifiche correnti non ancora aggiunte. Da qui la scorta.
VonC

La seconda e la terza riga non potrebbero essere compresse in "git checkout -b edge master"?
Paul Lynch

@PaulLynch considerando questi commit (a master) che dovrebbe essere sulla edge trovano su master, sì. Ho modificato la risposta.
VonC

Non vedo come git stashsia utile qui, dal momento che l'uso git checkout -bnon modifica affatto l'albero di lavoro ...
user1686

13

Se stai cercando di spostare il lavoro dal master a un ramo che già esiste, ma è dietro a master, git non ti permetterà di passare all'altro ramo. In questo caso, fai questo:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
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.