Der Hauptgrund für das, was ich sehen kann, ist folgender:
- In der GitHub-Benutzeroberfläche zum Zusammenführen von Pull-Anforderungen (Okt. 2015) können Sie die erste Zeile der Festschreibungsnachricht nicht bearbeiten und müssen sie daher zwingen
Merge pull request #123 from joebloggs/fix-snafoo
- Die GitHub-Benutzeroberfläche zum Durchsuchen des Festschreibungsverlaufs ermöglicht es Ihnen derzeit nicht, den Verlauf des Zweigs aus der
--first-parent
Sicht anzuzeigen
- Die GitHub-Benutzeroberfläche zum Anzeigen der Schuld an einer Datei ermöglicht es Ihnen derzeit nicht, die Schuld an einer Datei aus der
--first-parent
Sicht anzuzeigen (beachten Sie, dass dies nur in Git 2.6.2 behoben wurde, sodass wir GitHub verzeihen konnten, dass dies nicht der Fall war verfügbar)
Wenn Sie also alle drei oben genannten Situationen kombinieren, erhalten Sie eine Situation, in der nicht gequetschte Commits, die zusammengeführt werden, auf der GitHub-Benutzeroberfläche hässlich aussehen.
Ihr Verlauf mit gequetschten Commits sieht ungefähr so aus
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... Hotfix for android display issue
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... Implemented pop-up to select language
Während ohne gequetschte Commits die Geschichte ungefähr so aussieht
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... hotfix for #5849564648
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Wenn Sie in einer PR-Ablaufverfolgung viele Commits haben, bei denen eine Änderung eingetreten ist, kann dies zu einem Albtraum werden, wenn Sie sich auf die Verwendung der GitHub-Benutzeroberfläche beschränken .
Sie finden beispielsweise einen Nullzeiger, auf den irgendwo in einer Datei nicht mehr verwiesen wird. Sie sagen also "Wer hat das getan und wann? Welche Release-Versionen sind betroffen?". Dann wandern Sie zur Schuldansicht in der GitHub-Benutzeroberfläche und sehen, dass die Zeile in geändert wurde789fdfffdf
... "Oh, aber warte mal, die Einrückung dieser Zeile wurde nur so geändert, dass sie in den Rest des Codes passt." Nun müssen Sie zum Baumstatus für diese Datei im übergeordneten Festschreiben navigieren und erneut besuchen die Schuld Seite ... irgendwann finden Sie das Commit ... es ist ein Commit von vor 6 Monaten ... "Oh, das könnte die Benutzer für 6 Monate beeinflussen", sagen Sie ... ah, aber warten Sie, das Commit war eigentlich in einem Pull Request und wurde erst gestern zusammengeführt und noch hat niemand eine Veröffentlichung gekürzt ... "Verdammt ihr Leute für das Zusammenführen von Commits ohne die Geschichte zu quetschen" ist der Schrei, der normalerweise nach etwa 2 oder 3 Code-Archäologie-Expeditionen über das Internet zu hören ist GitHub UI
Lassen Sie uns nun überlegen, wie dies funktioniert, wenn Sie die Git-Befehlszeile verwenden (und Super-Awesome 2.6.2, für das es das Update gibt git blame --first-parent
).
- Wenn Sie die Git-Befehlszeile verwenden, können Sie die Merge-Commit-Nachricht vollständig steuern, sodass das Merge-Commit eine schöne Zusammenfassungszeile haben kann.
So würde unsere Commit-Historie aussehen
$ git log
1256556316... #423 Added new slideshow feature
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... #324 Hotfix for android display issue
787g8fgf78... hotfix for #5849564648
f56556316e... #28 Implemented pop-up to select language
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Aber wir können es auch tun
$ git log --first-parent
1256556316... #423 Added new slideshow feature
56556316ad... #324 Hotfix for android display issue
f56556316e... #28 Implemented pop-up to select language
(Mit anderen Worten: Mit der Git CLI können Sie Ihren Kuchen haben und ihn auch essen.)
Wenn wir nun auf das Nullzeiger-Problem stoßen ... nun, wir verwenden es einfach git blame --first-parent -w dodgy-file.c
und erhalten sofort das genaue Commit, bei dem die Nullzeiger-De-Referenz in den Master-Zweig eingefügt wurde, wobei einfache Leerzeichenänderungen ignoriert wurden.
Natürlich, wenn Sie Merges mit der GitHub-Benutzeroberfläche durchführen, git log --first-parent
ist das wirklich beschissen, da GitHub die erste Zeile der Merge-Commit-Nachricht erzwingt:
1256556316... Merge pull request #423 from jrandom/add-slideshows
56556316ad... Merge pull request #324 from ahacker/fix-android-display
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
Um es kurz zu machen:
Die GitHub-Benutzeroberfläche (Okt. 2015) weist eine Reihe von Mängeln bei der Zusammenführung von Pull-Anforderungen, der Darstellung des Commit-Verlaufs und der Attributierung von Schuldinformationen auf. Die derzeit beste Möglichkeit, diese Fehler in der GitHub-Benutzeroberfläche zu umgehen, besteht darin, die Benutzer aufzufordern, ihre Commits vor dem Zusammenführen zu quetschen.
In der Git-CLI gibt es diese Probleme nicht, und Sie können einfach auswählen, welche Ansicht Sie anzeigen möchten, damit Sie beide den Grund für eine bestimmte Änderung ermitteln können (indem Sie sich den Verlauf der nicht unterdrückten Festschreibungen ansehen) siehe die effektiv gequetschten Commits.
Post Script
Der letzte Grund, der häufig für das Squashing von Commits genannt wird, ist die Erleichterung des Backports. Wenn Sie nur ein Commit für den Backport haben (dh das Squashed-Commit), ist es einfach, das richtige zu finden.
Wenn Sie sich den Git-Verlauf ansehen git log --first-parent
, können Sie einfach die Merge-Commits auswählen. Die meisten Leute sind verwirrt, weil Sie die -m N
Option angeben müssen, aber wenn Sie den Commit erhalten haben git log --first-parent
, wissen Sie, dass dies das erste übergeordnete Element ist, dem Sie folgen möchtengit cherry-pick -m 1 ...