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.

14voto

Ivan Punkte 3867

Wie kann ich von diesem

A - B - C - D - E 
                |
                master

dazu?

A - B - C - D - E 
    |           |
    master      newbranch

Mit zwei Befehlen

  • git branch -m master newbranch

Geben

A - B - C - D - E 
                |
                newbranch

und

  • git branch master B

Geben

A - B - C - D - E
    |           |
    master      newbranch

0 Stimmen

Ja, das funktioniert und ist ziemlich einfach. Sourcetree GUI ist ein wenig verwirrt über die Änderungen in der Git-Shell, aber nach einem Fetch ist alles wieder in Ordnung.

0 Stimmen

Ja, sie sind wie in der Frage beschrieben. Die ersten beiden Diagramme sollen den Diagrammen in der Frage entsprechen, ich habe sie nur zur Veranschaulichung in der Antwort neu gezeichnet. Benennen Sie den Hauptzweig in newbranch um und erstellen Sie einen neuen Hauptzweig an der gewünschten Stelle.

11voto

ansi_lumen Punkte 1421

TLDR

git checkout branch_to_remove_commits
git reset --hard ${hash_of_new_tip}
git checkout -b branch_to_store_commits
# For each commit to move
git cherry-pick ${commit_hash}
git push --set-upstream origin branch_to_store_commits
# Switch back to last branch
git checkout -
git push -f

Für mich

git log --pretty=oneline -n ${NUMBER}

funktioniert am besten, um die fraglichen Commit-Hashes zu identifizieren.

10voto

Wenn Sie nur alle Ihre Daten verschieben müssen ungepusht verpflichtet sich zu einer neue Niederlassung , dann müssen Sie das einfach tun,

  1. erstellen. a neue Niederlassung von der aktuellen: git branch new-branch-name

  2. drücken. Ihr neue Niederlassung : git push origin new-branch-name

  3. zurückkehren Ihr alter(aktueller) Zweig auf den letzten geschobenen/stabilen Zustand zurück: git reset --hard origin/old-branch-name

Manche Menschen haben auch andere upstreams よりも origin , sollten sie geeignete upstream

6voto

pankaj Punkte 555

Sie können dies tun, ist nur 3 einfache Schritte, die ich verwendet.

1) Erstellen Sie einen neuen Zweig, in den Sie die letzte Aktualisierung übertragen möchten.

git branch <branch name>

2) Finden Sie die Recent Commit Id für die Übergabe im neuen Zweig.

git log

3) Kopieren Sie die Commit-ID. Beachten Sie, dass die Liste der neuesten Commits ganz oben steht, damit Sie Ihren Commit finden. Sie finden ihn auch über die Nachricht.

git cherry-pick d34bcef232f6c...

können Sie auch eine Art Commit-ID angeben.

git cherry-pick d34bcef...86d2aec

Jetzt ist Ihr Job erledigt. Wenn Sie die richtige ID und den richtigen Zweig gewählt haben, werden Sie Erfolg haben. Seien Sie also vorsichtig, bevor Sie dies tun, sonst kann ein anderes Problem auftreten.

Jetzt können Sie Ihren Code veröffentlichen

git push

5voto

rashok Punkte 11608

1) Erstellen Sie einen neuen Zweig, der alle Ihre Änderungen nach new_branch verschiebt.

git checkout -b new_branch

2) Gehen Sie dann zum alten Zweig zurück.

git checkout master

3) Git rebase durchführen

git rebase -i <short-hash-of-B-commit>

4) Der geöffnete Editor enthält dann die letzten 3 Commit-Informationen.

...
pick <C's hash> C
pick <D's hash> D
pick <E's hash> E
...

5) Veränderung pick zu drop in all diesen 3 Verpflichtungen. Speichern Sie dann und schließen Sie den Editor.

...
drop <C's hash> C
drop <D's hash> D
drop <E's hash> E
...

6) Jetzt werden die letzten 3 Übertragungen aus dem aktuellen Zweig entfernt ( master ). Schieben Sie nun die Verzweigung nachdrücklich, mit + Zeichen vor dem Namen der Zweigstelle.

git push origin +master

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