Push-Commits in einen anderen Zweig

384

Ist es möglich, Änderungen von einem Zweig in einen anderen zu übertragen und zu übertragen?

Angenommen, ich habe Änderungen in BRANCH1 festgeschrieben und möchte sie auf BRANCH2 übertragen .

Ab BRANCH1 gilt Folgendes :

git push origin **BRANCH2**

Und dann BRANCH1 zurücksetzen?

jviotti
quelle

Antworten:

710

Das wird fast funktionieren.

Wenn Sie zu einem nicht standardmäßigen Zweig wechseln, müssen Sie die Quellreferenz und die Zielreferenz angeben:

git push origin branch1:branch2

Oder

git push <remote> <branch with new changes>:<branch you are pushing to> 
SLaks
quelle
26
Müssen beide branch1und branch2müssen auf der Fernbedienung sein? Was ist, wenn Sie von lokal branch1auf die Fernbedienung übertragen möchten origin branch2?
Orad
11
@orad: Nein. Der erste Teil ist eigentlich nur eine Kennung für ein lokales Commit. Es muss nicht einmal ein Zweig sein.
SLaks
6
@abhisekp: Verwenden Sie die gleiche Syntax. Verwenden Sie<remote>/<branch>
SLaks
4
@abhisekp: Mach genau das, was ich gerade gesagt habe. Der aktuelle Zweig ist völlig irrelevant.
SLaks
21
Seien Sie sich bewusst, dass jemand (wie ich) versucht ist zu rennen und git push origin :branch2denkt, dass er nur den aktuellen lokalen Zweig auf die Fernbedienung schiebt branch2und stattdessen die Fernbedienung löschtbranch2 ! Der richtige Weg ist git push origin HEAD:branch2.
Helder Pereira
72

Sicher, obwohl es nur funktioniert, wenn es ein schneller Vorlauf von BRANCH2 ist oder wenn Sie es erzwingen. Die richtige Syntax dafür ist

git push <remote> <source branch>:<dest branch> 

Weitere Informationen zur Funktionsweise finden Sie in der Beschreibung einer "refspec" auf der git push-Manpage . Beachten Sie auch, dass sowohl ein Force-Push als auch ein Reset Vorgänge sind, die "den Verlauf neu schreiben" und nicht von schwachen Herzen versucht werden sollten, es sei denn, Sie sind absolut sicher, dass Sie wissen, was Sie in Bezug auf Remote-Repositorys und andere tun Leute, die Gabeln / Klone des gleichen Projekts haben.

Ryan Stewart
quelle
6
Vielen Dank! Ich werde nur hinzufügen, dass Sie mit erzwingen können git push --force remote local-branch:remote-branch.
Ferran Maylinch
16

Es ist sehr einfach. Angenommen, Sie haben Änderungen an Ihrem Zweig A vorgenommen, der sich sowohl lokal als auch remote befindet, möchten diese Änderungen jedoch auf Zweig B übertragen, der nirgendwo vorhanden ist.

Schritt 01: Erstellen und Wechseln zum neuen Zweig B.

Git Checkout -b B.

Schritt 02: Fügen Sie Änderungen in der neuen lokalen Verzweigung hinzu

git hinzufügen. // oder bestimmte Datei (en)

Schritt 03: Übernehmen Sie die Änderungen

git commit -m "commit_message"

Schritt 04: Änderungen in den neuen Zweig B verschieben . Mit dem folgenden Befehl wird auch remote ein neuer Zweig B erstellt

Git Push Ursprung B.

Jetzt können Sie anhand von Bitbucket überprüfen, ob der Zweig B ein Commit mehr als der Zweig A hat . Und wenn Sie den Zweig A auschecken, werden diese Änderungen nicht vorhanden sein, da sie in den Zweig B verschoben wurden .

Hinweis: Wenn Sie Ihre Änderungen in Zweig A übernommen haben und danach diese Änderungen in den neuen Zweig B verschieben möchten, müssen Sie diese Änderungen zuerst zurücksetzen. #HappyLearning

Bilal Ahmed Yaseen
quelle
2

In meinem Fall hatte ich ein lokales Commit, das nicht origin\masterverschoben, sondern an meine lokale masterNiederlassung übergeben wurde. Dieses lokale Commit sollte jetzt in einen anderen Zweig verschoben werden.

Mit Git Extensions können Sie Folgendes tun:

  • (Erstellen, falls nicht vorhanden und) Kasse einen neuen Zweig aus, in den Sie Ihr Commit verschieben möchten.
  • Wählen Sie das Commit aus dem Verlauf aus, das festgeschrieben und in diesen Zweig verschoben werden soll.
  • Klicken Sie mit der rechten Maustaste und wählen Sie Cherry Pick Commit .
  • Drücken Sie anschließend die Cherry-Auswahltaste .
  • Das ausgewählte Commit wird auf Ihren ausgecheckten Zweig angewendet. Jetzt festschreiben und pushen.
  • Überprüfen Sie Ihren alten Zweig mit dem fehlerhaften Commit.
  • Setzen Sie diesen Zweig auf das vorletzte Commit zurück, bei dem alles in Ordnung war (beachten Sie, was Sie hier tun!). Sie können dies tun, indem Sie mit der rechten Maustaste auf das vorletzte Commit klicken und hier den aktuellen Zweig zurücksetzen auswählen . Bestätigen Sie die Operation, wenn Sie wissen, was Sie tun.

Sie können dies auch über die GIT-Befehlszeile tun . Beispiel von David Christensen kopiert :

Ich denke, Sie werden feststellen, dass git cherry-pick+ git resetein viel schnellerer Workflow ist:

Wenn Sie dasselbe Szenario verwenden und "Feature" der Zweig ist, in dem das oberste Commit falsch ist, ist dies viel einfacher:

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

Spart viel Arbeit und ist das Szenario, git cherry-pick für das es entwickelt wurde.

Ich werde auch bemerken, dass dies auch funktioniert, wenn es nicht das oberste Commit ist; Sie brauchen nur einen Commitish für das Argument, um zu wählen, über:

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history

testen
quelle
2

Ich habe ein schlechtes Ergebnis mit git push origin branch1:branch2Befehl:

In meinem Fall branch2wird gelöscht und branch1mit einigen neuen Änderungen aktualisiert.

Wenn Sie also nur die Änderungen auf die Push wollen branch2von der branch1, versuchen Verfahren unter:

  • Am branch1:git add .
  • Am branch1:git commit -m 'comments'
  • Am branch1:git push origin branch1

  • Am branch2:git pull origin branch1

  • Ein branch1: Zum vorherigen Commit zurückkehren.

Benyamin Jafari
quelle
0

Sie können dies leicht tun

git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)
Ramiz Khan
quelle
-1

git init 
#git remote remove origin
git remote add origin  <http://...git>
echo "This is for demo" >> README.md 
git add README.md
git commit -m "Initail Commit" 
git checkout -b branch1 
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete  branch1
#git branch --unset-upstream  

Srinu Mareti
quelle
1
Bitte fügen Sie eine Erklärung des Codes hinzu.
Nakx
-4

Sie haben sich zu BRANCH1 verpflichtet und möchten dieses Commit entfernen, ohne die Änderungen zu verlieren? Git Reset ist das, was Sie brauchen. Tun:

git branch BRANCH2

Wenn Sie möchten, dass BRANCH2 ein neuer Zweig ist. Sie können dies auch am Ende mit einem anderen Zweig zusammenführen, wenn Sie möchten. Wenn BRANCH2 bereits vorhanden ist, lassen Sie diesen Schritt weg.

Dann mach:

git reset --hard HEAD~3

Wenn Sie das Commit für den von Ihnen festgeschriebenen Zweig zurücksetzen möchten. Dies übernimmt die Änderungen der letzten drei Commits.

Führen Sie dann die folgenden Schritte aus, um die zurückgesetzten Commits auf BRANCH2 zu übertragen

git checkout BRANCH2

Diese Quelle war hilfreich: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch

Sasa
quelle