5 erweiterte Git-Befehle zum Aktualisieren Ihres Git-Spiels

Wenn Sie heute Entwickler sind, haben Sie wahrscheinlich Git gelernt, das Versionskontrollsystem im Herzen moderner Software-Workflows. Sie kennen die Grundlagen - wie Repositorys funktionieren, wie Zweige erstellt und Änderungen festgeschrieben werden und wie diese Änderungen zusammengeführt und Anforderungen abgerufen werden.

Aber jetzt, da Sie die Grundlagen kennen, ist es Zeit, ein wenig aufzusteigen - um einige der leistungsstärkeren Funktionen von Git in Ihrem Workflow zu nutzen. Hier sind fünf erweiterte Git-Funktionen, die Teil Ihrer aktuellen und zukünftigen Entwicklungsbemühungen sind.

Vereinfachen Sie Commit-Historien mit git rebase

Wenn ein Projekt zwei Zweige enthält (z. B. einen Entwicklungszweig und einen Hauptzweig), die beide Änderungen enthalten, die kombiniert werden müssen, ist der git mergeBefehl die natürliche und einfache Möglichkeit, sie zu vereinheitlichen. A mergefügt die Entwicklungshistorie eines Zweigs als Zusammenführungszusage zum anderen hinzu. Dies bewahrt zwar beide Historien bis ins kleinste Detail, kann es jedoch schwierig machen, die gesamte Historie des Projekts zu verfolgen. In einigen Fällen möchten Sie möglicherweise ein einfacheres und saubereres Ergebnis. 

Der git rebaseBefehl führt auch zwei Zweige zusammen, tut dies jedoch etwas anders. A git rebaseschreibt den Festschreibungsverlauf eines Zweigs neu, sodass der andere Zweig ab dem Zeitpunkt, an dem er erstellt wurde, in ihn aufgenommen wird. Dies führt zu einem weniger verrauschten und lineareren Festschreibungsverlauf für diesen Zweig. Es bedeutet aber auch, dass potenziell nützliche Details über den anderen Zweig und den Zusammenführungsprozess entfernt werden. 

Zu diesem Zweck wird rebasees am besten verwendet, wenn Sie mehrere private Zweige haben, die Sie in einem einzigen, sauberen Festschreibungsverlauf konsolidieren möchten, bevor Sie ihn mit einem öffentlichen Zweig zusammenführen. Auf diese Weise erhalten Sie den vollen Vorteil  rebase, einen Commit-Verlauf linearer und leiser zu gestalten, ohne wichtige Details zum Verlauf der Commits für Ihr Projekt zu verschleiern.

Aufräumen verschmilzt mit git merge --squash

Eine andere Möglichkeit, Zusammenführungen und nachfolgende Commits leiser zu machen, ist die Verwendung der --squashOption in git merge. --squashNimmt alle Commits aus einer eingehenden Filiale und fasst sie zu einem einzigen konsolidierten Commit zusammen.

Das Schöne an einer gequetschten Zusammenführung ist, dass Sie auswählen können, wie die resultierenden bereitgestellten Dateien angewendet werden sollen. Sie können einfach den gesamten Satz von Änderungen als eine festschreiben, oder Sie können einige Dateien gleichzeitig festschreiben, wenn die Änderungen eng miteinander verbunden sind. Eine gequetschte Zusammenführung ist auch nützlich, wenn der Festschreibungsverlauf des eingehenden Zweigs nur im Kontext dieses Zweigs nützlich ist oder wenn er von einem privaten Zweig stammt, der ohnehin verworfen wird.

Wie bei a eignet sich rebasediese Technik am besten zum Festschreiben interner Zweige zum Master, eignet sich jedoch bei Bedarf auch für Pull-Anforderungen.

Beschleunigen Sie die Fehlersuche mit git bisect

Subtile Regressionen im Code sind am schwierigsten herauszufinden. Stellen Sie sich vor, Sie haben Ihrer Codebasis gerade einen Test hinzugefügt, um einen Fehler aufzuspüren, sind sich jedoch nicht sicher, wann der Fehler zum ersten Mal aufgetreten ist ... und Sie haben Hunderte oder sogar Tausende von Commits in Ihrem Repository. Mit dem  git bisect Befehl können Sie die Menge an Code, die Sie suchen müssen, um das Commit zu finden, das den Fehler verursacht hat, erheblich reduzieren.

Wenn Sie bisect( git bisect start) aktivieren , geben Sie zwei Punkte in Ihrer Codebasis an, um Ihre Suche zu begrenzen: einen, an dem Sie wissen, dass die Dinge schlecht sind ( HEADnormalerweise), und einen, an dem Sie wissen, dass die Dinge noch gut sind. bisectÜberprüfen Sie ein Commit auf halbem Weg zwischen dem schlechten und dem guten Commit und lassen Sie Ihre Tests ausführen. Dieser binäre Unterteilungsprozess wird wiederholt, bis das Commit angezeigt wird, das die Fehler verursacht hat.

git bisectist ein Glücksfall für große Codebasen mit langen, komplexen Commit-Historien, die Ihnen die Mühe ersparen, jedes letzte Commit durchzuarbeiten, in der Hoffnung, dass Sie Ihren Fehler früher oder später finden. Am sehr dest schneidet es um die Hälfte der Menge des Suchens nach unten und testen Sie tun müssen.

Commits erneut anwenden mit git cherry-pick

Viele erweiterte gitBefehle sind nur unter bestimmten Umständen nützlich und werden auch von mäßig fortgeschrittenen Benutzern ignoriert. Aber wenn Sie auf einen dieser besonderen Umstände stoßen, lohnt es sich, sie zu kennen.

Überlegen Sie git cherry-pick. Sie können ein bestimmtes Commit - ein beliebiges Commit aus einem beliebigen Zweig - auf einen anderen Zweig anwenden, ohne andere Änderungen aus dem Verlauf dieses Commits vornehmen zu müssen. Dies ist unter einigen wichtigen Umständen nützlich:

  • Sie haben ein Commit für den falschen Zweig vorgenommen und möchten es schnell auf den richtigen Zweig anwenden.
  • Sie möchten einen Fix von einem Zweig auf den Trunk anwenden, bevor Sie mit anderen Arbeiten am Trunk-Code fortfahren.

Beachten Sie, dass Sie neben der direkten Anwendung des Commits einige Optionen haben, wenn Sie cherry-pickes ausführen . Wenn Sie beispielsweise die --no-commitOption übergeben, wird das von Cherry ausgewählte Commit im Staging-Bereich des aktuellen Zweigs platziert. 

Organisieren Sie Projekte elegant mit Git-Submodulen

So wie die meisten Programmiersprachen die Möglichkeit bieten, Pakete oder Module zu importieren, bietet Git die Möglichkeit, den Inhalt eines Repositorys automatisch in ein anderes, ein Submodul, aufzunehmen . Sie können ein Unterverzeichnis in einem Repo erstellen und es automatisch mit dem Inhalt eines anderen Repos füllen, indem Sie aus Gründen der Konsistenz normalerweise auf einen bestimmten Commit-Hash verweisen.

Beachten Sie, dass Git-Submodule unter den folgenden Bedingungen am besten funktionieren:

  • Die fraglichen Submodule ändern sich nicht oft oder sind an ein bestimmtes Commit gebunden. Alle Arbeiten an einem Submodul und nicht mit einem Submodul sollten separat verwaltet werden.
  • Jeder verwendet eine Version von Git, die Submodule unterstützt und die Schritte versteht, die für die Arbeit mit ihnen erforderlich sind. Beispielsweise werden Submodulverzeichnisse nicht immer automatisch mit dem Inhalt des Submodul-Repositorys gefüllt. Möglicherweise müssen Sie den git submodule updateBefehl im Repo verwenden, um alles auf den neuesten Stand zu bringen.