Git-Tutorial für Fortgeschrittene
Durch die Bereitstellung Ihres Projekts über ein Remote-Repository können Sie jedes Detail flexibel verwalten. Bugfixes, Feature-Updates, Dateilöschung, Teamwork, Open-Source-Beiträge, Code-Bereitstellung und mehr stehen Ihnen jetzt mit fundierten Git-Kenntnissen zur Verfügung.
Sie verwenden Git, möchten aber mehr wissen? Hier sind einige fortgeschrittene Git-Tipps, die Ihre Projektversionskontrolle zum Kinderspiel machen.
Git-Zweig
Ein Git-Zweig verhindert, dass Sie direkt zum Master-Zweig pushen. Es ist hilfreich, wenn Sie ein Projekt mit einem Entwicklerteam verwalten. Sie können beliebig viele Git-Zweigs erstellen und diese später mit dem Master-Zweig zusammenführen.
Erstellen Sie einen Git-Zweig
Um einen Git-Branch zu erstellen, verwenden Sie:
git branch branch_name
Wechseln Sie zu einem Git-Zweig
Verwenden Sie die Kasse , um zu einem Git-Zweig zu wechseln:
git checkout branch_name
Nachdem Sie zu einem Branch gewechselt haben , können Sie Ihre Änderungen mit git add –all bereitstellen . Dann übergeben Sie sie mit dem Befehl git commit -m "commit name" .
Vergleichen Sie eine Filiale mit Master
Verwenden Sie den Befehl git diff :
git diff master..branch_name
So vergleichen Sie bestimmte Dateien:
git diff master..testb -- main.html
Der Vergleich zweier Zweige ähnelt dem Vergleich eines Zweigs mit dem Master:
git diff branch1..branch2
So sehen Sie die Unterschiede in einer bestimmten Datei zwischen zwei Zweigen:
git diff branch1..branch2 -- main.html
Push-Änderungen an eine Remote-Niederlassung
Vielleicht möchten Sie, dass ein anderer Entwickler sich die Änderungen ansieht, die Sie an einer Datei in Ihrem lokalen Zweig vorgenommen haben, bevor sie live übertragen werden. Es empfiehlt sich, Ihren lokalen Git-Zweig in eine Remote-Replik zu verschieben, damit sie sich das ansehen können.
Angenommen, Sie haben zuvor einen lokalen Branch namens changes erstellt . Sie können zu diesem lokalen Zweig wechseln, alle gewünschten Dateien anpassen, dann bereitstellen und in diesen Zweig übertragen.
Sie können diese Änderungen dann an die Remote-Version des Branch übertragen:
git push origin changes
Remote-Zweig mit Master mithilfe von Pull-Request zusammenführen
Ein anderer Programmierer hat also die Änderungen im Remote-Zweig ( Änderungen ) geprüft. Aber Sie möchten es mit dem Master-Branch zusammenführen und live übertragen.
Denken Sie daran, dass Ihr Remote-Zweig den Namen Ihres lokalen Git-Zweigs erbt ( Änderungen ). So führen Sie die Änderungen zusammen:
Wechseln Sie in den Master-Zweig:
git checkout master
Ziehen Sie den Ursprung oder HEAD des Zweigs ( Änderungen ), um ihn mit dem Master-Zweig zusammenzuführen:
git pull origin changes
Übertragen Sie diese Zusammenführung live in den Master-Zweig:
git push origin master
Verwenden Sie stattdessen Git Merge
So führen Sie einen Branch mit dem Master mit dem Befehl merge zusammen :
In den Master-Branch migrieren:
git checkout master
Mit dem Zweig zusammenführen ( Änderungen ):
git merge changes
Übertragen Sie dann die Zusammenführung live in den Master-Zweig:
git push origin master
Stellen Sie sicher, dass Sie die Änderungen durch den Namen Ihres Zweigs ersetzen.
Sobald eine Zusammenführung erfolgreich war, können Sie den Branch lokal und remote löschen, wenn Sie ihn nicht mehr benötigen:
Git-Rebase
Wenn Sie mehrere Branches mit veralteten Commits haben, können Sie die Header /Refs dieser Branches rebasieren oder neu fokussieren, um die Heads /Refs eines aktualisierten zu erben.
Das Rebasing ist daher praktisch, wenn Sie einige Zweige mit der Basis eines aktuellen Zweigs aktualisieren müssen.
Rebasing sollte jedoch keine häufige Aktion sein, insbesondere wenn Sie mit einem Team arbeiten, da dies den gesamten Workflow stören kann. Wenn Sie jedoch alleine arbeiten und mit Ihrem Workflow und Ihren Branches vertraut sind, sollte das Rebasing keine Verwüstung anrichten, wenn Sie wissen, wo und wie es verwendet wird.
Nehmen Sie beispielsweise an, dass Sie zwei Zweige haben; Zweig1 und Zweig2. Nun haben Sie seit einiger Zeit keine Änderungen an branch1 vorgenommen. Aber Sie übertragen ständig Änderungen an branch2, auch in letzter Zeit.
Sie haben sich also entschieden, branch1 mit dem Flow mitzunehmen. Das Rebasing von branch1 in branch2 bedeutet daher, dass Sie branch1 anweisen, seine vorherigen Commits zu ignorieren und den letzten Commit an branch2 zu erben.
So können Sie das tun:
Wechseln Sie zum verlassenen Zweig (Zweig1):
git checkout branch1
Dann rebase branch1 auf den aktualisierten branch2:
git rebase branch2
Git Squash
Mit Git Squash können Sie mehrere Commits zu einem zusammenführen. Es hilft, wenn Sie git commit viele Male in einem einzigen Update ausführen. Ein praktisches Beispiel ist, wenn jeder Bugfix oder Code-Refactor für ein einzelnes Feature einen separaten Commit hat.
Aber vielleicht möchten Sie den HEAD-Commit nicht mit den begleitenden Commits pushen, da sie alle den gleichen Zweck haben. Ein empfohlener Ansatz besteht darin, sie zu einem zusammenzufassen, um Verwirrung beim Verfolgen von Commits zu vermeiden.
Der beste Weg, Commits zu quetschen, ist der interaktive Rebase-Modus. Sehen Sie sich das folgende Beispiel an, um dies besser zu verstehen.
Nehmen Sie in diesem Beispiel an, dass Sie über fünf Fehlerbehebungen verfügen. Und es gibt einen Commit für jeden von ihnen. So können Sie diese fünf Commits zu einem zusammenfassen:
Führen Sie git reflog aus , um den Hash-Code Ihrer Commits anzuzeigen :
git reflog
Hier ist das Ergebnis in diesem Fall:
Ihr Ziel ist es nun, die letzten fünf Commits zu zerquetschen, beginnend mit dem ersten Fix bis zum fünften Fix .
Kopieren Sie dazu den Hash-Code des Commits direkt unter den ersten Fix ( 0a83962 ). Drücken Sie dann Q , um das Reflog zu beenden.
Führen Sie nun git rebase –interactive für diesen Hash aus.
git rebase --interactive 0a83962
Git öffnet dann eine interaktive Rebase-Datei, die wie folgt aussieht:
Um die Commits mit Ausnahme des ersten Fix zu quetschen , ersetzen Sie pick durch s für jeden der anderen Commits:
Speichern und schließen Sie diese Datei.
Anschließend wird eine weitere Datei geöffnet, in der Sie den gequetschten Commit umbenennen können:
Bereinigen Sie diese und geben Sie einen bevorzugten Namen für den gequetschten Commit ein:
Speichern Sie diese Datei. Schließen Sie es dann und Sie sollten eine Erfolgsmeldung in Ihrem Terminal erhalten.
Hinweis: Die interaktive Datei kann im Terminal geöffnet werden. Wenn Sie jedoch unter Windows arbeiten, möchten Sie möglicherweise Ihr Terminal dazu zwingen, Dateien global in Ihrem bevorzugten Texteditor zu öffnen, um das Quetschen zu vereinfachen.
Öffnen Sie dazu Ihre Befehlszeile und führen Sie Folgendes aus:
git config --global core.editor "'path to choice text editor' -n -w"
Git Fork vs. Git Clone
Forking und Cloning sind zwei verschiedene Begriffe in Git. Sie können Ihr Repository nicht forken, da es bereits bei Ihnen ist. Sie können jedoch das Repository anderer Leute forken und anschließend klonen.
Ein Repository zu forken bedeutet, dass Sie eine Kopie des Repositorys von jemandem greifen und es zu Ihrem machen. Sobald Sie eine Kopie dieses Repositorys erhalten haben, können Sie es wie jedes Ihrer Git-Repositorys für lokale Änderungen klonen.
So klonen Sie ein Remote-Repository auf GitHub und starten einen Download in Ihr lokales Verzeichnis:
git clone https://github.com/username/repository_name.git/
Wiederherstellen einer Datei in ihrem Standardzustand
Wenn Sie die Änderungen in einer Datei nach dem letzten Commit löschen möchten, können Sie den Befehl git restore verwenden :
git restore filename
Ein Commit ändern
Sie können auf einen früheren Commit zurückgreifen, wenn Sie beim Staging vergessen, Änderungen an einigen Dateien vorzunehmen.
Nehmen Sie Änderungen an der vergessenen Datei vor. Verwenden Sie dann git amend , um einen Commit zu überprüfen:
git add file_forgotten
git commit --amend
Unstage-Dateien
Sie können bestimmte Dateien, die Sie für einen Commit bereitgestellt haben, mit dem Befehl git rm entfernen:
git rm --cached filename
Sie können auch mehrere Dateien gleichzeitig entfernen:
git rm --cached file1 file2 file3 file4
Denken Sie daran, die entsprechende Dateierweiterung an jede Datei anzuhängen, die Sie freistellen möchten. Eine reine Textdatei sollte beispielsweise filename.txt sein .
Git-Reset
Die Verwendung von git reset ist hilfreich, wenn Sie alle Dateien, die Sie für einen Commit bereitgestellt haben, auf einmal löschen möchten:
git reset
Git reset HEAD weist jedoch den HEAD eines Branchs auf einen bestimmten Commit in Ihrem Arbeitsbaum. Wenn Sie beispielsweise Ihr aktuelles Commit noch nicht übertragen haben, können Sie auf das kürzlich übertragene Commit zurückgreifen:
git reset --soft HEAD~1
Ersetzen Sie –soft durch –hard, wenn Sie den aktuellen Commit bereits gepusht haben:
git reset --hard HEAD~1
Git-Revert
Im Gegensatz zum Reset- Befehl behält git revert die Integrität Ihres Commit-Verlaufs bei. Dies ist praktisch, wenn Sie einen Commit aufgrund von Fehlern oder Bugs ändern möchten.
Es gibt weder den Ziel-Commit auf noch macht er einen neuen. Stattdessen werden die letzten Änderungen, die Sie vorgenommen haben, zurückgesetzt, ohne einen solchen Commit zu löschen oder umzubenennen. Es ist eine großartige Möglichkeit, Ihre Commits sauberer zu halten, und es ist sicherer, als die ganze Zeit zurückzusetzen.
So kehren Sie zu einem Commit zurück:
git revert HEAD~1
Wobei HEAD~1 auf einen bestimmten Commit in Ihrem Arbeitsbaum zeigt.
Löschen einer verfolgten Datei oder eines Verzeichnisses
Sie können git rm -f verwenden , um alle verfolgten Dateien in Ihrem Arbeitsbaum zu löschen. Beachten Sie jedoch, dass Git nicht verfolgte Dateien nicht entfernen kann, da sie nicht zwischengespeichert werden.
So löschen Sie eine bereitgestellte Datei:
git rm -f filename
So entfernen Sie einen bereitgestellten Ordner:
git rm -r -f foldername
Git-Logging
So zeigen Sie Ihre Commit-Logs und Ihren Verlauf in Git an:
git log
So protokollieren Sie die Aktivitäten in einer bestimmten Filiale:
git log branch_name
Manchmal möchten Sie vielleicht zu einem abgebrochenen Commit zurückkehren. So zeigen Sie abgebrochene Commits an, einschließlich der relevanten:
git reflog
So zeigen Sie Ref-Logs für einen bestimmten Branch an:
git reflog branch_name
Verwalten Sie Ihre Projektversionen wie ein Profi mit Git
Da Git viele Vorteile bietet, können Sie Ihre Projektversionen aus der Ferne verwalten, ohne Dateien und Ordner vor Ort in Ihrer Hauptniederlassung zu knacken. Darüber hinaus können Sie Projekte problemlos mit einem Team durchführen.
Wie Sie gesehen haben, bietet Git viele Funktionen, die Sie erkunden können. Achten Sie jedoch darauf, diese Funktionen gezielt einzusetzen. Andernfalls könnten Sie am Ende Dinge kaputt machen. Sie können jedoch immer noch ein Demo-Remote-Repository einrichten und mit diesen Funktionen herumspielen.