6424 Stimmen

Verschieben der letzten Übertragung(en) in einen neuen Zweig mit Git

Ich würde gerne die letzten Commits, die ich an Master übertragen habe, in einen neuen Zweig verschieben und Master auf den Stand vor diesen Commits zurückbringen. Leider ist mein Git-Fu noch nicht stark genug, kann mir jemand helfen?

D.h. Wie kann ich von diesem

master A - B - C - D - E

dazu?

newbranch     C - D - E
             /
master A - B

161 Stimmen

Anmerkung: Ich habe die gegenteilige Frage gestellt aquí

6 Stimmen

eddmann.com/posts/ dieser funktioniert

22 Stimmen

Wurden die Kommentare hier gelöscht? Ich frage, weil ich bei meinem zweimonatlichen Besuch dieser Frage immer an diesem Kommentar vorbeilaufe.

5voto

David Chelidze Punkte 1044

Ich war überrascht, dass niemand diesen Weg empfohlen hat:

git checkout master
git checkout <commit hash from which you want to split>
git checkout -b new_branch
git rebase master
git checkout master
git reset --hard <commit hash you splitted>

zu erklären:

  1. Schritt, bei dem wir die Übergabe, die wir aufteilen wollen, auschecken
  2. dann von dieser Übergabe aus einen neuen Zweig erstellen
  3. Mit rebase werden new_branch und master synchronisiert. Jetzt haben wir also zwei gleiche Zweige mit den gleichen Commits
  4. mit Reset auf Master werden die letzten Übertragungen nach dem Split bereinigt
  5. Posten auflisten

0 Stimmen

Auf diese Weise wird nur ein Zweig mit der ersten Übergabe erstellt, die sich von Main/Master unterscheidet, aber der Rest wird vergessen.

4voto

Quesofat Punkte 1461

Die meisten der hier vorgestellten Lösungen zählen die Anzahl der Commits, die Sie zurückgehen lassen möchten. Ich denke, dass dies eine fehleranfällige Methodik ist. Das Zählen würde ein erneutes Zählen erfordern.

Sie können einfach den Commit-Hash des Commits übergeben, den Sie in HEAD haben möchten, oder in anderen Worten, den Commit, über den Sie den letzten Commit haben möchten:

(Hinweis siehe Commit-Hash)

Um dies zu vermeiden:

1) git checkout master

2) git branch <feature branch> master

3) git reset --hard <commit hash>

4) git push -f origin master

4voto

kokoro Punkte 63

Wenn Sie das Emacs-Git-Porzellan Magit verwenden, können Sie dies einfach mit dem Befehl b s (magit-branch-spinoff). Sie werden aufgefordert, einen Namen für Ihren neuen Zweig einzugeben, und sobald Sie die Eingabetaste drücken, ist alles klar.

Von der Magit-Dokumentation :

Mit diesem Befehl wird ein neuer Zweig erstellt und ausgecheckt, der mit dem aktuellen Zweig beginnt und diesem folgt. Dieser Zweig wird wiederum auf den letzten Commit zurückgesetzt, den er mit seinem Upstream teilt. Wenn der aktuelle Zweig keinen Upstream oder keine nicht gepushten Commits hat, wird der neue Zweig trotzdem erstellt und der zuvor aktuelle Zweig bleibt unangetastet.

Dies ist nützlich, um einen Funktionszweig zu erstellen, nachdem die Arbeit am alten Zweig (wahrscheinlich, aber nicht unbedingt "Master") bereits begonnen hat.

1voto

Raphael Fernandes Punkte 587

Ich musste 7 Übertragungen von einem alten Zweig auf einen neuen Zweig verschieben.

git checkout old-branch     # in the example, master
git reset --hard h4sh       # h4sh is the hash for the commit 
git checkout -b new-branch  
git push origin new-branch

Danach waren beide Zweige mit den 7 Commits verbunden, die ich gemacht habe. Nach git checkout new-branch Ich war gut drauf. git log et git status , aber beim Zugriff auf den alten Zweig ( git checkout old-branch ), bekam ich die Meldung "git ist um 7 Commits im Rückstand und kann vorgespult werden". Was bei mir funktionierte, um diese Meldung zu löschen, war die folgende Methode:

git checkout old-branch
git status 
> git is behind by 7 commits and can be fast-forwarded
git push origin old-branch -f

Nach diesem Schritt wurden die letzten 7 Commits nur für den neuen Zweig referenziert und die vorherigen als alter Zweig und neuer Zweig im Bitbucket-Baum referenziert.

1voto

bunjeeb Punkte 1045

Wenn Sie wie ich ein UI-Mensch sind und Visual Studio verwenden. Dann können Sie wie folgt vorgehen: In meinem Fall möchte ich die letzte Übertragung in einen anderen Zweig übernehmen.

  1. Klicken Sie mit der rechten Maustaste auf den vorherigen Eintrag (Commit).

enter image description here

  1. Alle Commit-Änderungen erscheinen also in der Git-Änderungen fenster.

  2. Speichern Sie jetzt Ihre Änderungen

enter image description here

  1. Gehen Sie zu der gewünschten Zweigstelle oder erstellen Sie eine neue Zweigstelle in der rechten unteren Ecke.

enter image description here

  1. Doppelklicken Sie unter "Git Changes" auf Ihr letztes Stash.

  2. Der Bereich "Versteckdetails" wird geöffnet. Klicken Sie auf "Pop", dann lösen Sie Konflikte (falls vorhanden).

enter image description here

  1. Und schließlich übertragen Sie Ihre Änderungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X