GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie funktioniert Git?

Einführung

Git ist das weltweit beliebteste dezentrale Versionskontrollsystem. Ein gutes Verständnis von Git ist unerlässlich, wenn Sie codieren und an einem kollaborativen Softwareentwicklungsprojekt arbeiten möchten.

In diesem Artikel erfahren Sie, wie Git funktioniert und wie Sie seine wichtigen Funktionen verwenden.

Voraussetzungen

  • Git installiert und konfiguriert (siehe Git unter Windows installieren, Git auf Mac installieren, Git unter Ubuntu installieren, Git unter CentOS 7 installieren oder Git unter CentOS 8 installieren)

Wie funktioniert Git?

Git ermöglicht es Benutzern, Codeänderungen zu verfolgen und ihr Projekt mit einfachen Befehlen zu verwalten.

Das Herzstück von Git ist ein Repository verwendet, um ein Projekt zu enthalten. Ein Repository kann lokal oder auf einer Website wie GitHub gespeichert werden. Git ermöglicht es Benutzern, mehrere verschiedene Repositories zu speichern und jedes einzeln zu verfolgen.

Während der gesamten Entwicklung hat das Projekt mehrere Sicherungspunkte, die als Commits bezeichnet werden . Die Commit-Historie enthält alle Commits, also Änderungen, die während der Entwicklung am Projekt vorgenommen wurden. Mit einem Commit können Sie den Code zu einem beliebigen Commit im Commit-Verlauf zurücksetzen oder vorspulen.

Git verwendet SHA-1-Hashes um auf die Commits zu verweisen. Jeder eindeutige Hash zeigt auf einen bestimmten Commit im Repository. Mithilfe von Hashes erstellt Git eine baumartige Struktur zum einfachen Speichern und Abrufen von Daten.

Die Dateien in jedem Git-Projekt durchlaufen mehrere Phasen:

  • Arbeitsverzeichnis . Modifizierte Dateien, aber nicht getrackt und noch nicht bereit zum Commit.
  • Staging-Verzeichnis . Das Hinzufügen geänderter Dateien zur Staging-Umgebung bedeutet, dass sie bereit zum Commit sind.
  • Verpflichtet . Snapshots von Dateien aus dem Staging-Bereich, die im Commit-Verlauf gespeichert sind.

Das folgende Diagramm zeigt den grundlegenden Git-Workflow:

Die folgenden Abschnitte erklären Git-Funktionen im Detail.

Inszenierung

Wenn Sie möchten, dass Git Änderungen nachverfolgt, die Sie an einer bestimmten Datei vorgenommen haben, müssen Sie sie zum Staging-Bereich hinzufügen. Git erkennt, wenn Sie eine Datei ändern, aber verfolgt sie nicht, es sei denn, Sie stellen sie bereit . Der Bereitstellungsbereich stellt eine Sicherheitsebene dar, die es Ihnen ermöglicht, die Änderungen zu überprüfen, bevor Sie sie festschreiben.

Das Vorhandensein im Staging-Bereich ist eine Voraussetzung dafür, dass Dateien später festgeschrieben, d. h. auf dem Master-Branch implementiert werden. Sie können überprüfen, welche Dateien Git verfolgt, indem Sie Folgendes ausführen:

git status

Um eine Datei zum Staging-Bereich hinzuzufügen, verwenden Sie die folgende Syntax:

git add [filename]

Ersetzen Sie [filename] Syntax mit dem tatsächlichen Namen der Datei.

Zum Beispiel:

Wenn Sie Ihre Meinung ändern, können Sie eine Datei aus dem Bereitstellungsbereich entfernen. Verwenden Sie zum Unstaging einer Datei die folgende Syntax:

git rm --cached [filename]

Zum Beispiel:

Verpflichtungen eingehen

Ein Commit stellt einen Sicherungspunkt für Ihre Arbeit dar, eine Momentaufnahme Ihres Codes zu einem bestimmten Zeitpunkt. Das Hinzufügen von Dateien zum Staging-Bereich bedeutet, dass sie zum Commit bereit sind.

Führen Sie Folgendes aus, um zu überprüfen, ob Sie Dateien zum Übertragen bereit haben:

git status

Zum Beispiel:

Hier sehen wir, dass drei Dateien zum Commit bereit sind. Um sie festzuschreiben, verwenden Sie die folgende Syntax:

git commit -m "Notes about the commit"

Jeder Commit sollte nach dem -m eine Beschreibung haben -Flag, das Ihnen später hilft zu wissen, worum es bei der Übergabe ging.

Zum Beispiel:

Die Ausgabe enthält den Commit und gibt an, was geändert wurde.

Sie können Ihren Commit-Verlauf überprüfen durch Ausführen von:

git log

Die Ausgabe zeigt ein Protokoll aller von Ihnen vorgenommenen Commits, wer den Commit durchgeführt hat, das Datum und die Commit-Notizen. Hinzufügen von --oneline flag zeigt den Commit-Verlauf komprimiert in einer Zeile. Das Weglassen des Flags zeigt einen detaillierten Commit-Verlauf.

Zurücksetzen

Wenn Sie während Ihrer Projektentwicklung Fehler gemacht haben oder einen Commit aus irgendeinem Grund rückgängig machen möchten, git revert ermöglicht Ihnen dies.

Das git revert Der Befehl macht einen bestimmten Commit rückgängig, d. h. macht den Commit rückgängig, den Sie vorgenommen haben, um die Änderungen aus dem Master-Zweig zu entfernen.

Die Syntax lautet:

git revert [commit_ID]

Finden Sie Commit-IDs, indem Sie git log ausführen . Der 7-stellige Code ist die Commit-ID.

Das folgende Beispiel demonstriert das git revert Befehl:

Der git reset Befehl permanent bringt Sie zurück zu einem bestimmten Punkt in der Entwicklung. Alle Dateien und Änderungen, die nach diesem Zeitpunkt hinzugefügt wurden, werden nicht bereitgestellt, wenn Sie sie erneut hinzufügen möchten.

Warnung: Verwenden Sie git reset nur wenn Sie absolut sicher sind, dass Sie Teile Ihres Codes rückgängig machen/löschen möchten, da diese Aktion nicht rückgängig gemacht werden kann.

Die Syntax lautet:

git reset [commit_ID]

Angabe von --hard Flag entfernt die nicht bereitgestellten Dateien und macht es unmöglich, sie zurückzubringen.

Verzweigung

Ein Fork ist eine vollständige Kopie eines bestehenden Repositorys Dadurch können Sie Änderungen vornehmen und experimentieren, ohne das ursprüngliche Projekt zu beeinträchtigen. Forking ist eine Möglichkeit für jemanden, Änderungen an einem bestehenden Projekt vorzuschlagen, oder es kann ein Ausgangspunkt für ein eigenes Projekt sein, wenn der Code Open Source ist.

Wenn Sie eine Änderung oder eine Fehlerbehebung für ein Projekt vorschlagen möchten, können Sie ein Repository verzweigen, die Korrektur vornehmen und eine Pull-Anfrage an den Projektbesitzer senden.

Das folgende Diagramm veranschaulicht, wie Forking funktioniert:

Führen Sie die folgenden Schritte aus, um ein Repository zu forken:

1. Melden Sie sich bei Ihrem GitHub-Konto an.

2. Besuchen Sie die Repository-Seite auf GitHub und klicken Sie auf Fork Option.

3. Warten Sie, bis der Forking-Vorgang abgeschlossen ist. Wenn es fertig ist, haben Sie eine Kopie des Repositorys in Ihrem GitHub-Konto.

4. Im nächsten Schritt nehmen Sie die Repository-URL aus dem Kodex Abschnitt und klonen Sie das Repository auf Ihren lokalen Rechner.

5. Klonen Sie das Repository mit der folgenden Syntax:

git clone [repository URL]

Geben Sie die URL anstelle von [repository URL] ein Syntax.

Zum Beispiel:

In diesem Beispiel haben wir einen Fork des springmvc-raml-plugins erstellt Repository, und jetzt können wir unsere Änderungen implementieren oder mit der Erstellung eines neuen Plugins über dem vorhandenen beginnen.

Verzweigung

Branching ist eine Funktion in Git, die es Entwicklern ermöglicht, an einer Kopie des Originalcodes zu arbeiten, um Fehler zu beheben oder neue Funktionen zu entwickeln. Durch die Arbeit an einem Branch haben Entwickler keine Auswirkungen auf den Master-Branch bis sie die Änderungen implementieren möchten.

Der Master-Zweig stellt im Allgemeinen die stabile Version dar Ihres Codes, der freigegeben oder veröffentlicht wird. Aus diesem Grund sollten Sie es vermeiden, neue Funktionen und neuen Code zum Master-Zweig hinzuzufügen, wenn diese instabil sind.

Verzweigungen schaffen eine isolierte Umgebung um die neuen Funktionen auszuprobieren, und wenn sie Ihnen gefallen, können Sie sie in den Master-Zweig einbinden. Wenn etwas schief geht, können Sie den Branch löschen und der Master-Branch bleibt unberührt.

Verzweigungen erleichtern die gemeinsame Programmierung und ermöglichen es jedem, gleichzeitig an seinem Teil des Codes zu arbeiten.

Das folgende Diagramm ist eine visuelle Darstellung der Verzweigung in Git:

Die Syntax zum Erstellen eines neuen Zweigs in Git lautet:

git branch [branch-name]

Geben Sie anstelle von [branch-name] einen Namen für Ihre Filiale ein Syntax. Zum Beispiel:

In diesem Beispiel haben wir einen neuen Branch mit dem Namen feature-1 erstellt .

Verschmelzung und Konflikte

Der git merge Der Befehl ermöglicht es Entwicklern, die an einem neuen Feature oder einer Fehlerbehebung in einem separaten Zweig arbeiten, ihre Änderungen mit dem Hauptzweig zusammenzuführen, nachdem sie fertig sind. Die Änderungen zusammenzuführen bedeutet, sie in den Master-Zweig zu implementieren.

Die Entwickler können ihre Änderungen mit git merge eingeben ohne ihre Arbeit an alle Projektmitarbeiter senden zu müssen.

Führen Sie Folgendes aus, um Ihre vorhandenen Branches anzuzeigen:

git branch -a

Für dieses Tutorial haben wir einen separaten Branch mit dem Namen feature-1 erstellt . Zum Zusammenführen von feature-1 mit dem master verzweigen gehen Sie wie folgt vor:

1. Wechseln Sie zum Master-Zweig. Der git merge Der Befehl erfordert, dass Sie sich auf dem Merge-Empfangszweig befinden. Führen Sie den folgenden Befehl aus, um zum Hauptzweig zu wechseln:

git checkout master

2. Verwenden Sie nach dem Wechsel zum Hauptzweig die folgende Syntax, um Ihre Änderungen zusammenzuführen:

git merge [branch-name]

Geben Sie anstelle von [branch-name] den Namen Ihrer Filiale ein Syntax.

Zum Beispiel:

Git fügt Ihre Änderungen automatisch in den Master-Branch ein, sichtbar für jeden, der am Projekt arbeitet.

Manchmal stoßen Sie jedoch auf Merge Konflikte .

Ein Konflikt tritt beispielsweise auf, wenn jemand beschließt, Änderungen am Master-Branch vorzunehmen, während Sie an einem anderen Branch arbeiten. Diese Art von Konflikt tritt auf, weil Sie Ihre Änderungen mit dem Master-Zweig zusammenführen möchten, der sich jetzt von Ihrer Codekopie unterscheidet.

Unser detaillierter Leitfaden bietet verschiedene Methoden zum Lösen von Merge-Konflikten in Git.

Änderungen abrufen/ziehen

Der git fetch und git pull Befehle werden beide verwendet, um Änderungen aus dem entfernten Repository abzurufen.

Der Unterschied besteht darin, dass git fetch ruft nur die Metadaten aus dem Remote-Repository ab, überträgt aber nichts in Ihr lokales Repository. Es teilt Ihnen nur mit, ob seit Ihrem letzten Pull Änderungen verfügbar sind.

Im folgenden Beispiel git fetch informiert uns, dass es einige Änderungen im entfernten Repository gibt, aber nichts hat sich im lokalen Repository geändert:

Andererseits git pull sucht auch nach neuen Änderungen im entfernten Repository und bringt diese Änderungen in Ihr lokales Repository.

Also git pull macht zwei Dinge mit einem Befehl - ein git fetch , und ein git merge . Der Befehl lädt die an Ihrem aktuellen Zweig vorgenommenen Änderungen herunter und aktualisiert den Code in Ihrem lokalen Repository.

Zum Beispiel:

In dieser Ausgabe sehen wir, dass es sich um einen Fast-Forward-Merge-Typ handelte und dass Git eine Datei in das lokale Repository gezogen hat – README.md .

Änderungen vorantreiben

Der git push Befehl macht das Gegenteil von git pull , sodass Sie Ihre Änderungen freigeben und im Remote-Repository veröffentlichen können.

Wenn Sie lokal Änderungen vornehmen und diese in ein Remote-Repository übertragen möchten, führen Sie Folgendes aus:

git push

Zum Beispiel:

Wenn Sie lokal einen neuen Zweig erstellt haben, der remote nicht existiert, gibt der Befehl beim Versuch, die Änderungen zu pushen, einen Fehler zurück:

Git bietet die Lösung in der Ausgabe an. Führen Sie den in der Ausgabe angegebenen Befehl aus, um Ihren Zweig nach oben zu verschieben:

Umbasieren

Wenn Sie einen Branch erstellen, erstellt Git eine Kopie des vorhandenen Codes, damit Sie ihn weiterentwickeln können. Manchmal müssen Sie möglicherweise neue Änderungen integrieren aus dem Hauptzweig um mit der allgemeinen Entwicklung Schritt zu halten.

Beim Rebasing werden neue Änderungen aus dem Master-Branch in Ihren Feature-Branch implementiert. Das bedeutet, dass Git die neuen Änderungen aus dem Master-Branch wiedergibt und Commits über der Spitze Ihres Feature-Branch erstellt.

Führen Sie die folgenden Schritte aus, um Ihren Feature-Zweig umzubasieren:

1. Wechseln Sie mit git checkout zum Feature-Branch . Die Syntax lautet:

git checkout [branch-name]

2. Führen Sie den folgenden Befehl aus, um Ihren Zweig umzubasieren:

git rebase master

Das folgende Diagramm zeigt, wie die Rebase-Funktion funktioniert:


Ubuntu
  1. Ssh – Wie funktioniert TCP-Keepalive in Ssh?

  2. Wie funktioniert Rm? Was macht Rm?

  3. Wie funktioniert sig_atomic_t eigentlich?

  4. Wie beschränke ich die Dateigröße beim Commit?

  5. Wie funktioniert der ps-Befehl?

Was ist Reverse-DNS und wie funktioniert es?

Wie funktioniert SFTP?

Git Revert Commit:So machen Sie den letzten Commit rückgängig

So machen Sie den letzten Commit in Git rückgängig

Was ist Docker? Wie funktioniert es?

Wie funktioniert Swap-Speicher in Linux?