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 auflisten
git branch new-branch: Einen neuen Branch erstellen
git 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 wechseln
git checkout file.txt: Dateien in den Arbeitsbereich wiederherstellen
git 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 wechseln
git 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ösen
git mergetool --tool=<tool-name>: Merge-Tool angeben
git log Die Commit-Historie anzeigen. git log: Commit-Verlauf anzeigen
git 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 speichern
git stash pop: Die zuletzt gespeicherten Änderungen wiederherstellen
git 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 auflisten
git tag v1.0: Einen neuen Tag erstellen
git 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 wechseln
git worktree remove <path>: Arbeitsverzeichnis löschen
Weitere Erweiterungen