Git-Branch-Verwaltung
Die Git-Branch-Verwaltung ist eine der leistungsstarken Funktionen von Git, die es mehreren Entwicklern ermöglicht, parallel zu arbeiten, neue Funktionen zu entwickeln, Fehler zu beheben oder Experimente durchzuführen, ohne die Hauptcodebasis zu beeinträchtigen.
Nahezu jedes Versionskontrollsystem unterstützt Branches in irgendeiner Form; ein Branch repräsentiert eine unabhängige Entwicklungslinie.
Die Verwendung von Branches bedeutet, dass Sie sich von der Hauptentwicklungslinie abzweigen und weiterarbeiten können, ohne die Hauptlinie zu beeinträchtigen.
Git-Branches sind tatsächlich Zeiger auf Änderungs-Snapshots.
Manche nennen das Branching-Modell von GitSpezialmove-Funktion, und genau deshalb ist esGit, das sich von der Familie der Versionskontrollsysteme abhebt.
Branch erstellen
Einen neuen Branch erstellen und zu ihm wechseln:
git checkout -b <branchname>
Zum Beispiel:
git checkout -b feature-xyz
Befehl zum Branchwechsel:
git checkout (branchname)
Zum Beispiel:
git checkout main
Wenn du Branches wechselst, ersetzt Git den Inhalt deines Arbeitsverzeichnisses durch den Snapshot des letzten Commits auf diesem Branch, sodass mehrere Branches nicht mehrere Verzeichnisse erfordern.
Branches anzeigen
Alle Branches anzeigen:
git branch
Remote-Branches anzeigen:
git branch -r
Alle lokalen und Remote-Branches anzeigen:
git branch -a
Branch zusammenführen
Andere Branches in den aktuellen Branch zusammenführen:
git merge <branchname>
Zum Beispiel zum main-Branch wechseln und den feature-xyz-Branch zusammenführen:
git checkout main git merge feature-xyz
Merge-Konflikte beheben
Wenn bei einem Merge ein Konflikt auftritt, markiert Git die konfliktbehafteten Dateien, und du musst den Konflikt manuell auflösen.
Öffne die konfliktbehaftete Datei und löse den Konflikt gemäß den Markierungen auf.
Konfliktlösung als abgeschlossen markieren:
git add <conflict-file>
Merge-Ergebnis committen:
git commit
Branch löschen
Lokalen Branch löschen:
git branch -d <branchname>
Einen nicht zusammengeführten Branch gewaltsam löschen:
git branch -D <branchname>
Remote-Branch löschen:
git push origin --delete <branchname>
Beispiel
Bevor wir beginnen, lass uns ein Testverzeichnis erstellen:
$ mkdir gitdemo $ cd gitdemo/ $ git init Initialized empty Git repository... $ touch README $ git add README $ git commit -m '第一次版本提交' [master (root-commit) 3b58100] 第一次版本提交 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README
Git-Branch-Verwaltung
Branches auflisten
Grundlegende Befehle zum Auflisten von Branches:
git branch
Ohne Argumente,git branchDies listet die Branches in deinem lokalen Repository auf.
$ git branch * master
Dieses Beispiel bedeutet, dass wir einen Zweig namensmasterhaben, und dieser Zweig ist der aktuelle Zweig.
Wenn Siegit initausführen, erstellt Git standardmäßig einenmaster-Branch für Sie.
Wenn wir manuell einen Branch erstellen möchten, führen Siegit branch (branchname)aus. Das ist alles.
$ git branch testing $ git branch * master testing
Jetzt können wir sehen, dass es einen neuen Branchtesting gibt.。
Wenn Sie auf diese Weise nach dem letzten Commit einen neuen Branch erstellen, und es später weitere Commits gibt, und Sie dann zumtesting-Branch wechseln, stellt Git Ihr Arbeitsverzeichnis auf den Zustand wieder her, den es hatte, als Sie den Branch erstellt haben.
Als Nächstes demonstrieren wir, wie man Branches wechselt. Wir verwenden git checkout (branch), um zu dem Branch zu wechseln, den wir ändern möchten.
$ ls README $ echo 'example.com' > test.txt $ git add . $ git commit -m 'add test.txt' [master 3e92c19] add test.txt 1 file changed, 1 insertion(+) create mode 100644 test.txt $ ls README test.txt $ git checkout testing Switched to branch 'testing' $ ls README
Wenn wir zumtesting-Branch wechseln, wurde die neue Datei test.txt, die wir hinzugefügt haben, entfernt. Wenn wir zummaster-Branch zurückwechseln, erscheinen sie wieder.
$ git checkout master Switched to branch 'master' $ ls README test.txt
Wir können auch den Befehl git checkout -b (branchname) verwenden, um einen neuen Branch zu erstellen und sofort dorthin zu wechseln, sodass wir in diesem Branch arbeiten können.
$ git checkout -b newtest Switched to a new branch 'newtest' $ git rm test.txt rm 'test.txt' $ ls README $ touch example.php $ git add . $ git commit -am 'removed test.txt、add example.php' [newtest c1501a2] removed test.txt、add example.php 2 files changed, 1 deletion(-) create mode 100644 example.php delete mode 100644 test.txt $ ls README example.php $ git checkout master Switched to branch 'master' $ ls README test.txt
Wie Sie sehen können, haben wir einen Branch erstellt, die Datei test.txt in diesem Branch entfernt und die Datei example.php hinzugefügt, dann sind wir zu unserem Hauptbranch zurückgewechselt. Die gelöschte Datei test.txt ist zurückgekehrt, und die neu hinzugefügte example.php existiert nicht im Hauptbranch.
Die Verwendung von Branches zur Trennung von Arbeit ermöglicht es uns, in verschiedenen Entwicklungsumgebungen zu arbeiten und hin- und herzuwechseln.
Branch löschen
Befehl zum Löschen von Branches:
git branch -d (branchname)
Wenn wir zum Beispiel den testing-Branch löschen möchten:
$ git branch * master testing $ git branch -d testing Deleted branch testing (was 85fc7e7). $ git branch * master
Branches zusammenführen
Sobald ein Branch unabhängige Inhalte hat, werden Sie ihn irgendwann wieder in Ihren Hauptbranch zusammenführen wollen. Mit dem folgenden Befehl können Sie einen beliebigen Branch in den aktuellen Branch zusammenführen:
git merge
$ git branch * master newtest $ ls README test.txt $ git merge newtest Updating 3e92c19..c1501a2 Fast-forward example.php | 0 test.txt | 1 - 2 files changed, 1 deletion(-) create mode 100644 example.php delete mode 100644 test.txt $ ls README example.php
Im obigen Beispiel haben wir den Branch newtest in den Hauptbranch zusammengeführt, und die Datei test.txt wurde gelöscht.
Nach dem Zusammenführen können Sie den Branch löschen:
$ git branch -d newtest Deleted branch newtest (was c1501a2).
Nach dem Löschen bleibt nur der master-Branch übrig:
$ git branch * master
Merge-Konflikt
Das Zusammenführen ist nicht nur ein einfacher Vorgang des Hinzufügens oder Entfernens von Dateien; Git führt auch Änderungen zusammen.
$ git branch * master $ cat example.php
Hinweis:Wenn example.php nicht existiert, müssen Sie diese Datei zuerst erstellen. Der Befehl kanntouch example.php lauten。
Zuerst erstellen wir einen Branch namens change_site, wechseln zu ihm und ändern den Inhalt von example.php zu:
<?php echo 'example'; ?>
Erstellen Sie den Branch change_site:
$ git checkout -b change_site Switched to a new branch 'change_site' $ vim example.php $ head -3 example.php <?php echo 'example'; ?> $ git commit -am 'changed the example.php' [change_site 7774248] changed the example.php 1 file changed, 3 insertions(+)
Für vim-Befehlsoperationen lesen Sie bitte:Linux vi/vim。
Committen Sie den geänderten Inhalt in den Branch change_site. Wenn wir nun zurück zum master-Branch wechseln, sehen wir, dass der Inhalt auf den Zustand vor unserer Änderung zurückgesetzt wurde (leere Datei, kein Code). Wir ändern die Datei example.php erneut.
$ git checkout master Switched to branch 'master' $ cat example.php $ vim example.php # 修改内容如下 $ cat example.php <?php echo 1; ?> $ git diff diff --git a/example.php b/example.php index e69de29..ac60739 100644 --- a/example.php +++ b/example.php @@ -0,0 +1,3 @@ +<?php +echo 1; +?> $ git commit -am '修改代码' [master c68142b] 修改代码 1 file changed, 3 insertions(+)
Jetzt wurden diese Änderungen in meinem "master"-Branch aufgezeichnet. Als Nächstes werden wir den Branch "change_site" hineinmergen.
$ git merge change_site Auto-merging example.php CONFLICT (content): Merge conflict in example.php Automatic merge failed; fix conflicts and then commit the result. $ cat example.php # 打开文件,看到冲突内容 <?php <<<<<<< HEAD echo 1; ======= echo 'example'; >>>>>>> change_site ?>
Als wir den vorherigen Branch in den master-Branch gemergt haben, ist ein Merge-Konflikt aufgetreten, und jetzt müssen wir ihn manuell bearbeiten.
$ vim example.php $ cat example.php <?php echo 1; echo 'example'; ?> $ git diff diff --cc example.php index ac60739,b63d7d7..0000000 --- a/example.php +++ b/example.php @@@ -1,3 -1,3 +1,4 @@@ <?php +echo 1; + echo 'example'; ?>
In Git können wir git add verwenden, um Git mitzuteilen, dass der Dateikonflikt behoben wurde
$ git status -s UU example.php $ git add example.php $ git status -s M example.php $ git commit [master 88afe0e] Merge branch 'change_site'
Jetzt haben wir den Merge-Konflikt erfolgreich behoben und das Ergebnis committet.
Befehlshandbuch
| Befehl | Beschreibung | Verwendungsbeispiel |
|---|---|---|
git branch |
Branches auflisten, erstellen oder löschen. Es wechselt nicht den Branch; es wird nur verwendet, um die Existenz von Branches zu verwalten. | git branch: Alle Branches auflistengit branch new-branch: Einen neuen Branch erstellengit branch -d old-branch: Branch löschen |
git checkout |
Zum angegebenen Branch wechseln oder Dateien im Arbeitsverzeichnis wiederherstellen. Es kann auch verwendet werden, um bestimmte Commits auszuchecken. | git checkout branch-name: Branch wechselngit checkout file.txt: Dateien in den Arbeitsbereich wiederherstellengit checkout <commit-hash>: Einen bestimmten Commit auschecken |
git switch |
Speziell zum Wechseln von Branches verwendet, im Vergleich zugit checkoutEs ist prägnanter und intuitiver, wird hauptsächlich für Branch-Operationen verwendet. |
git switch branch-name: Zum angegebenen Branch wechselngit switch -c new-branch: Einen neuen Branch erstellen und dorthin wechseln |
git merge |
Änderungen vom angegebenen Branch in den aktuellen Branch zusammenführen. | git merge branch-name: Änderungen vom angegebenen Branch in den aktuellen Branch zusammenführen |
git mergetool |
Merge-Tool starten, um Merge-Konflikte aufzulösen. | git mergetool: Standard-Merge-Tool verwenden, um Konflikte aufzulösengit mergetool --tool=<tool-name>: Merge-Tool angeben |
git log |
Die Commit-Historie anzeigen. | git log: Commit-Verlauf anzeigengit log --oneline: Commit-Verlauf im Kompaktmodus anzeigen |
git stash |
Nicht committete Änderungen im aktuellen Arbeitsverzeichnis speichern und es in einen sauberen Arbeitsbereich zurücksetzen. | git stash: Aktuelle Änderungen speicherngit stash pop: Die zuletzt gespeicherten Änderungen wiederherstellengit stash list: Alle gespeicherten Änderungen auflisten |
git tag |
Tags erstellen, auflisten oder löschen. Tags werden verwendet, um bestimmte Commits zu markieren. | git tag: Alle Tags auflistengit tag v1.0: Einen neuen Tag erstellengit tag -d v1.0: Tag löschen |
git worktree |
Ermöglicht das Auschecken mehrerer Arbeitsbereiche in einem Repository, geeignet für die gleichzeitige Arbeit an mehreren Branches. | git worktree add <path> branch-nameNeuen Arbeitsbereich am angegebenen Pfad hinzufügen und zum angegebenen Branch wechselngit worktree remove <path>: Arbeitsverzeichnis löschen |