So vermeiden Sie Merge-Commit-Hölle auf GitHub / BitBucket
100
Wir haben am Ende eine Menge solcher Commits in unserem Repo:
Merge branch 'master' of bitbucket.org:user/repo
Dies geschieht jedes Mal, wenn ein Entwickler seine lokale Verzweigung mit dem Repo der obersten Ebene synchronisiert.
Gibt es überhaupt eine Möglichkeit, um zu verhindern, dass diese Merge-Commit-Hölle das gesamte Repo-Protokoll überfüllt? Kann man sie vermeiden, wenn man die Pull-Requests auf irgendeine Weise initiiert?
Ich weiß, dass ich Git-Rebase durchführen kann, wenn dies nur in meiner lokalen VM erfolgt. Gibt es eine Äquivalenz in der GitHub / BitBucket-Benutzeroberfläche?
Wenn Sie Zusammenführungs-Commits vermeiden möchten, müssen Sie sicherstellen, dass alle Commits schnell vorgespult werden. Sie tun dies, indem Sie sicherstellen, dass Ihr Feature-Zweig vor einer Zusammenführung wie folgt sauber auf Ihre Entwicklungslinie zurückgesetzt wird:
git checkout master
git checkout -b feature/foo
# make some commits
git rebase master
git checkout master
git merge --ff-only feature/foo
Rebase verfügt auch über viele Flags, einschließlich des interaktiven Rebasings mit dem -iFlag. Dies ist jedoch möglicherweise nicht erforderlich, wenn Sie die Dinge so einfach wie möglich halten und den gesamten Zweigverlauf bei einer Zusammenführung beibehalten möchten.
Verwenden Sie die --ff-onlyFlagge
Abgesehen von der Neugründung stellt die Verwendung des --ff-onlyFlags sicher, dass nur Schnellvorlauf-Commits zulässig sind. Ein Commit wird nicht durchgeführt, wenn es sich stattdessen um ein Merge-Commit handelt. Auf der Handbuchseite von git-merge (1) heißt es:
--ff-only
Verweigern Sie das Zusammenführen und Beenden mit einem Status ungleich Null, es sei denn, der aktuelle HEAD ist bereits auf dem neuesten Stand oder die Zusammenführung kann als schneller Vorlauf aufgelöst werden.
Dies ist eine großartige Antwort. Ich benutze Rebase so oft wie möglich. Ich wusste jedoch nichts über die Nur -ff-Flagge. Ziemlich cool!
Leo Correa
3
Vielen Dank für die Rebase und --ff-only Ratschläge. Wie kann ich dies jedoch in der Benutzeroberfläche von GitHub / BitBucket tun, wie in meiner Frage erwähnt?
Niklas9
3
@Niklas Ich bin mir ziemlich sicher, dass Sie auf die CLI zurückgreifen müssen, um das zu tun, was Sie wollen. GitHub bietet nicht die volle Leistung von Git. Nur eine Teilmenge seiner Funktionen sowie einige grafische und soziale Netzwerke. Viel Glück!
Todd A. Jacobs
3
Bei diesem Vorgang ist zu beachten, dass Sie vor dem Zusammenführen des Themenzweigs (feature / foo) mit dem Master den Pull-Origin-Master (bei Verwendung einer Fernbedienung) aktivieren sollten, um sicherzustellen, dass der Hauptzweig auf dem neuesten Stand ist . Wenn Updates gefunden wurden, stellen Sie sicher, dass Sie den Master erneut auf den Themenzweig zurücksetzen, bevor Sie ihn wieder in den Master zusammenführen.
Chikamichi
19
@CodeGnome nenne es nicht "auf die CLI zurückgreifen" ... in Wirklichkeit sollten Sie davor warnen, auf die Benutzeroberfläche zurückzugreifen!
Droogans
9
"Todd A. Jacobs" bereits erwähnt "Rebase" ist das Konzept hier. Dies ist nur eine detailliertere Vorgehensweise.
Angenommen, Sie befinden sich in der Hauptniederlassung
$ git branch
* master
Wenn Sie eine Korrektur vornehmen möchten, erstellen Sie eine „Fixbranch“, die vom Master verzweigt ist
$ git checkout -b fixbranch
Vielleicht hätten Sie ein paar Tage in dieser Branche gearbeitet und ein paar Verpflichtungen eingegangen.
Der Tag, an dem Sie Ihre Commits auf das zentrale Master-Repo übertragen wollten! Kasse Master und erhalte die neuesten Änderungen aus dem zentralen Master-Repo
$ git checkout master
$ git pull origin master
Starten Sie Ihre Fixbranch mit dem Master neu, um einen sauberen Verlauf zu haben und die Konflikte im lokalen Repo selbst zu lösen.
$ git checkout fixbranch
$ git rebase master
Jetzt ist fixbranch auf dem neuesten Stand des zentralen Masters. Lassen Sie mich fixbranch in den Master-Zweig einbinden
$ git checkout master
$ git merge fixbranch
Ich bin fertig! Lassen Sie mich den lokalen Master zum zentralen Master schieben
"Todd A. Jacobs" bereits erwähnt "Rebase" ist das Konzept hier. Dies ist nur eine detailliertere Vorgehensweise.
Angenommen, Sie befinden sich in der Hauptniederlassung
Wenn Sie eine Korrektur vornehmen möchten, erstellen Sie eine „Fixbranch“, die vom Master verzweigt ist
Vielleicht hätten Sie ein paar Tage in dieser Branche gearbeitet und ein paar Verpflichtungen eingegangen.
Der Tag, an dem Sie Ihre Commits auf das zentrale Master-Repo übertragen wollten! Kasse Master und erhalte die neuesten Änderungen aus dem zentralen Master-Repo
Starten Sie Ihre Fixbranch mit dem Master neu, um einen sauberen Verlauf zu haben und die Konflikte im lokalen Repo selbst zu lösen.
Jetzt ist fixbranch auf dem neuesten Stand des zentralen Masters. Lassen Sie mich fixbranch in den Master-Zweig einbinden
Ich bin fertig! Lassen Sie mich den lokalen Master zum zentralen Master schieben
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
quelle