Wie benutze ich Git Merge - -Squash?
-
24-10-2019 - |
Frage
Ich habe einen Remote -Git -Server, hier ist das Szenario, das ich ausführen möchte:
Für jeden Fehler/jede Funktion erstelle ich einen anderen Git -Zweig
Ich verpflichte meinen Code in dieser Git-Filiale immer wieder mit unabhängigen Git-Nachrichten
Im Top -Repository müssen wir einen Bug für einen Fehler mit offizieller Git -Nachricht machen
Wie kann ich meine Filiale in die Remote-Filiale verschmelzen, damit sie nur einen Commit für alle meine Schecks erhalten (ich möchte dafür sogar eine Commit-Nachricht zur Verfügung stellen)?
Lösung
Sagen Sie, Ihr Bug -Fix -Zweig wird aufgerufen bugfix
und du willst es zusammenführen master
:
git checkout master
git merge --squash bugfix
git commit
Dadurch werden alle Commits von der abgenommen bugfix
Zweig, drücken Sie sie in 1 Commit und verschmelzen es mit Ihrem master
Zweig.
Erläuterung:
git checkout master
Wechselt zu Ihrem master
Zweig.
git merge --squash bugfix
Nimmt alle Commits aus dem bugfix
Zweig und fusioniert es mit Ihrem aktuellen Zweig.
git commit
Schafft einen einzigen Commit aus den zusammengeführten Änderungen.
Weglassen -m
Mit Parameter können Sie eine Entwurfs -Commit -Nachricht ändern, die jede Nachricht von Ihren zerquetschten Commits enthält, bevor Sie Ihr Commit abschließen.
Andere Tipps
Was das schließlich für mich aufgeräumt hat, war ein Kommentar Zeigt das:
git checkout main
git merge --squash feature
ist das Äquivalent zu tun:
git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .
Wenn ich einen Feature -Zweig mit 105 (!!) Commits fusionieren möchte und sie alle in einen in eine zerquetschen lassen möchte, möchte ich nicht git rebase -i origin/master
weil ich separat zusammenlösen muss, um Konflikte für zusammenzufassen jeder der Zwischenkommiten (oder zumindest diejenigen, die sich selbst nicht selbst herausfinden können). Verwendung git merge --squash
Bringt mir das Ergebnis, das ich möchte, von einem einzigen Commit für das Zusammenführen einer gesamten Feature -Filiale. Und ich muss höchstens eine manuelle Konfliktlösung durchführen.
Sie möchten mit der Squash -Option zusammenarbeiten. Das ist, wenn Sie es jeweils eine Zweigstelle tun möchten.
git merge --squash feature1
Wenn Sie alle Zweige gleichzeitig mit Single -Commits verschmelzen möchten, rebase zuerst die einzelnen Funktionen interaktiv und kreischen Sie dann jede Feature, dann verschmelzen Octopus:
git checkout feature1
git rebase -i master
Squash in ein Commit und wiederholen Sie dann für die anderen Merkmale.
git checkout master
git merge feature1 feature2 feature3 ...
Diese letzte Zusammenführung ist eine "Oktopus -Verschmelzung", weil sie viele Zweige gleichzeitig verschmelzen.
Hoffe das hilft
Wenn Sie schon haben git merge bugfix
an main
, Sie können Ihren Zusammenführungsmondit in einem mit:
git reset --soft HEAD^1
git commit
Verschmelzen newFeature
Zweig in master
mit einem individuellen Commit:
git merge --squash newFeature && git commit -m 'Your custom commit message';
Wenn Sie stattdessen tun, tun Sie es
git merge --squash newFeature && git commit
Sie erhalten eine Commit -Nachricht, die alle enthält newFeature
Branch -Commits, die Sie anpassen können.
Ich erkläre es hier gründlich: https://youtu.be/fqnaiacelt4
Ich weiß, dass es bei dieser Frage nicht speziell von Github geht, aber da Github so weit verbreitet ist und dies die Antwort ist, nach der ich gesucht habe, werde ich sie hier teilen.
GitHub kann je nach den für das Repository aktivierten Zusammenführungsoptionen Kürbisverschleppungen durchführen.
Wenn Kürbisverführungen aktiviert sind, sollte die Option "Kürbis und Merge" in der Dropdown -Art unter der Taste "Merge" angezeigt werden.
Angenommen, Sie haben in Feature/Task1 mit mehreren Commits gearbeitet.
Gehen Sie zu Ihrer Projektabteilung (Projekt/my_project)
git checkout project/my_project
Erstellen Sie einen neuen Zweig (Feature/Task1_bugfix)
git checkout -b feature/task1_bugfix
Marge mit dem
--squash
Möglichkeitgit merge --squash feature/task1
Erstellen Sie ein einzelnes Komitee
git commit -am "add single comments"
Schieben Sie Ihren Zweig
git push --set-upstream origin feature/task1_bugfix
Für Git
Erstellen Sie eine neue Funktion
über Terminal/Shell:
git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
Dadurch wird es nicht bestrebt, ermöglicht es Ihnen, es zuerst zu überprüfen.
Dann verpflichten Sie und beenden Sie die Funktionen aus diesem neuen Zweig und löschen/ignorieren Sie das alte (das, auf dem Sie dev).