Ist es möglich, Änderungen von einem Zweig auf einen anderen zu übertragen und zu verschieben.
Angenommen, ich habe Änderungen in BRANCH1 übertragen und möchte sie in BRANCH2 verschieben.
Ist das von BRANCH1 aus möglich?
git push origin **BRANCH2**
Und dann BRANCH1 zurücksetzen?
Das wird fast funktionieren.
Wenn Sie zu einem nicht standardmäßigen Zweig pushen, müssen Sie die Quell- und die Zielreferenz angeben:
git push origin branch1:branch2
Oder
git push <remote> <branch with new changes>:<branch you are pushing to>
Sicherlich, aber es wird nur funktionieren, wenn es ein Schnellvorlauf von BRANCH2 ist oder wenn Sie es erzwingen. Die korrekte Syntax für eine solche Aktion lautet
git push <remote> <source branch>:<dest branch>
Siehe die Beschreibung von "refspec" auf der git push man page für weitere Details, wie es funktioniert. Beachten Sie auch, dass sowohl ein Force Push als auch ein Reset Operationen sind, die die Geschichte umschreiben und nur von schwachen Gemütern durchgeführt werden sollten, wenn Sie absolut sicher sind, dass Sie wissen, was Sie in Bezug auf entfernte Repositories und andere Personen, die Forks/Klone desselben Projekts haben, tun.
Es' ist sehr einfach. Angenommen, Sie haben Änderungen an Ihrem Zweig A vorgenommen, der sich sowohl lokal als auch entfernt befindet, aber Sie möchten diese Änderungen an den Zweig B übertragen, der nirgendwo existiert.
Schritt-01: Anlegen und Umschalten auf den neuen Zweig B
git-Kasse -b B
Schritt-02: Änderungen in der neuen lokalen Zweigstelle hinzufügen
git hinzufügen . //oder spezifische Datei(en)
Schritt-03: Übernehmen Sie die Änderungen
git commit -m "commit_message"
Schritt-04: Änderungen in den neuen Zweig schieben B. Der folgende Befehl erzeugt ebenfalls einen neuen Zweig B aus der Ferne
git push Ursprung B
Jetzt können Sie von bitbucket aus verifizieren, dass der Zweig B einen Commit mehr als der Zweig A haben wird. Und wenn Sie den Zweig A auschecken werden, werden diese Änderungen't da sein, da sie in den Zweig B geschoben wurden.
Anmerkung:A Wenn Sie Ihre Änderungen in den Zweig A übertragen haben und danach diese Änderungen in den neuen Zweig B verschieben wollen, müssen Sie diese Änderungen zuerst zurücksetzen.
In meinem Fall hatte ich einen lokalen Commit, der nicht in den origin\master
gepusht wurde, sondern in meinen lokalen master
Zweig. Dieser lokale Commit sollte nun in einen anderen Zweig verschoben werden.
Mit Git Extensions können Sie so etwas tun:
Sie können das auch über die GIT-Befehlszeile machen. Beispiel kopiert von David Christensen:
Ich denke, Sie werden feststellen, dass git cherry-pick
+ git reset
ein viel
schnelleren Arbeitsablauf:
Unter Verwendung desselben Szenarios, wobei "feature" der Zweig mit dem der oberste Commit falsch ist, wäre es viel einfacher, dies zu tun:
git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^
Das spart eine Menge Arbeit und ist das Szenario, für das
git cherry-pick
entwickelt wurde, um damit umzugehen.Ich möchte noch anmerken, dass dies auch funktioniert, wenn es nicht der oberste Commit ist; man braucht nur ein Commitish für das Argument für cherry-pick, über:
git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # lösche den spezifischen Commit aus der Historie
Ich erhalte ein schlechtes Ergebnis mit dem Befehl git push origin branch1:branch2
:
In meinem Fall wurde branch2
gelöscht und branch1
wurde mit den neuen Änderungen aktualisiert.
Wenn Sie also wollen, dass die Änderungen nur auf den Zweig2
vom Zweig1
gepusht werden, versuchen Sie diese Prozeduren:
Auf Zweig1
:
git fügen Sie .
hinzu.
Auf Zweig1
:
git commit -m 'Kommentare'
Auf Zweig1
: git commit -m 'Kommentare'
:
git push Ursprungszweig1
Auf Zweig2
:
git pull Ursprungszweig1
Auf Zweig1
:
zum vorherigen Commit zurückkehren.
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)
Sie haben sich zu BRANCH1 verpflichtet und wollen diese Verpflichtung loswerden, ohne die Änderungen zu verlieren? git reset ist das, was Sie brauchen. Tun Sie es:
git branch BRANCH2
wenn Sie möchten, dass BRANCH2 eine neue Niederlassung wird. Wenn Sie möchten, können Sie diese am Ende auch mit einem anderen Zweig zusammenführen. Wenn BRANCH2 bereits existiert, dann lassen Sie diesen Schritt aus.
Dann tun Sie es:
git reset --hard HEAD~3
wenn Sie die Übergabe auf dem Zweig, den Sie übergeben haben, zurücksetzen möchten. Dabei werden die Änderungen der letzten drei Commits übernommen.
Gehen Sie dann wie folgt vor, um die zurückgesetzten Commits nach BRANCH2 zu bringen
git checkout BRANCH2
Diese Quelle war hilfreich: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch