Git-Commit-Historie anzeigen

Das Anzeigen der Git-Commit-Historie hilft Ihnen, Codeänderungen und den Entwicklungsfortschritt zu verstehen.

Git bietet mehrere Befehle und Optionen zum Anzeigen der Commit-Historie, von einfachen Logs bis hin zu detaillierten Diffs.

Für die Git-Commit-Historie werden im Allgemeinen zwei gängige Befehle verwendet:

  • git log- Historische Commit-Einträge anzeigen.
  • git blame <file>- Die historischen Änderungsdatensätze der angegebenen Datei in Listenform anzeigen.

git log

Nachdem Sie eine Reihe von Commits in Git erstellt oder ein Projekt geklont haben, können Sie, wenn Sie die Commit-Historie überprüfen möchten, mit dem Befehlgit loganzeigen.

git logDer Befehl wird verwendet, um die Commit-Historie im Git-Repository anzuzeigen.

git logEr zeigt alle Commit-Informationen vom neuesten bis zum frühesten Commit an, einschließlich Commit-Hash, Autor, Commit-Datum und Commit-Nachricht usw.

git logDie grundlegende Syntax des Befehls lautet:

git log [选项] [分支名/提交哈希]

Zu den üblichen Optionen gehören:

  • -p: Zeigt den Patch des Commits an (spezifische Änderungen).
  • --oneline: Zeigt Commit-Informationen in einem prägnanten einzeiligen Format an.
  • --graph: Branch- und Merge-Verlauf grafisch anzeigen.
  • --decorate: Die Commits anzeigen, auf die Branches und Tags verweisen.
  • --author=<作者>: Nur Commits von einem bestimmten Autor anzeigen.
  • --since=<时间>: Nur Commits nach einem angegebenen Zeitpunkt anzeigen.
  • --until=<时间>: Nur Commits vor einem angegebenen Zeitpunkt anzeigen.
  • --grep=<模式>: Nur Commit-Nachrichten anzeigen, die das angegebene Muster enthalten.
  • --no-merges: Keine Merge-Commits anzeigen.
  • --stat: Kurze Statistiken anzeigen, einschließlich geänderter Dateien und Zeilenanzahl.
  • --abbrev-commit: Kurze Commit-Hash-Werte verwenden.
  • --pretty=<格式>: Ein benutzerdefiniertes Format verwenden, um Commit-Informationen anzuzeigen.

Verwenden Sie für die Operationen im vorherigen Kapitel den Befehlgit log, um die historischen Commit-Einträge wie folgt aufzulisten:

$ git log
commit d5e9fc2c811e0ca2b2d28506ef7dc14171a207d9 (HEAD -> master)
Merge: c68142b 7774248
Author: example <[email protected]>
Date:   Fri May 3 15:55:58 2019 +0800

    Merge branch 'change_site'

commit c68142b562c260c3071754623b08e2657b4c6d5b
Author: example <[email protected]>
Date:   Fri May 3 15:52:12 2019 +0800

    修改代码

commit 777424832e714cf65d3be79b50a4717aea51ab69 (change_site)
Author: example <[email protected]>
Date:   Fri May 3 15:49:26 2019 +0800

    changed the example.php

commit c1501a244676ff55e7cccac1ecac0e18cbf6cb00
Author: example <[email protected]>
Date:   Fri May 3 15:35:32 2019 +0800

Wir können die Option --oneline verwenden, um eine kompakte Version der Historie anzuzeigen.

$ git log --oneline
$ git log --oneline
d5e9fc2 (HEAD -> master) Merge branch 'change_site'
c68142b 修改代码
7774248 (change_site) changed the example.php
c1501a2 removed test.txt、add example.php
3e92c19 add test.txt
3b58100 第一次版本提交

Was uns das verrät, ist die Entwicklungsgeschichte dieses Projekts.

Wir können auch die Option --graph verwenden, um zu sehen, wann Branches und Merges in der Historie aufgetreten sind. Das Folgende ist derselbe Befehl mit aktivierter Topologie-Graph-Option:

*   d5e9fc2 (HEAD -> master) Merge branch 'change_site'
|\  
| * 7774248 (change_site) changed the example.php
* | c68142b 修改代码
|/  
* c1501a2 removed test.txt、add example.php
* 3e92c19 add test.txt
* 3b58100 第一次版本提交

Jetzt können wir deutlicher sehen, wann die Arbeit auseinanderlief und wann sie wieder zusammengeführt wurde.

Du kannst auch den--reverseParameter verwenden, um alle Logs in umgekehrter Reihenfolge anzuzeigen.

$ git log --reverse --oneline
3b58100 第一次版本提交
3e92c19 add test.txt
c1501a2 removed test.txt、add example.php
7774248 (change_site) changed the example.php
c68142b 修改代码
d5e9fc2 (HEAD -> master) Merge branch 'change_site'

Wenn du nur das Commit-Log eines bestimmten Benutzers finden möchtest, kannst du den Befehl verwenden: git log --author. Angenommen, wir möchten den Teil finden, der von Linus im Git-Quellcode committet wurde:

$ git log --author=Linus --oneline -5
81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory
3bb7256 make "index-pack" a built-in
377d027 make "git pack-redundant" a built-in
b532581 make "git unpack-file" a built-in
112dd51 make "mktag" a built-in

Wenn du ein Datum angeben musst, kannst du mehrere Optionen verwenden: --since und --before, aber du kannst auch --until und --after verwenden.

Wenn ich zum Beispiel alle Commits im Git-Projekt von vor drei Wochen und nach dem 18. April sehen möchte, kann ich Folgendes ausführen (ich habe außerdem die Option --no-merges verwendet, um Merge-Commits auszublenden):

$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
5469e2d Git 1.7.1-rc2
d43427d Documentation/remote-helpers: Fix typos and improve language
272a36b Fixup: Second argument may be any arbitrary string
b6c8d2d Documentation/remote-helpers: Add invocation section
5ce4f4e Documentation/urls: Rewrite to accomodate transport::address
00b84e9 Documentation/remote-helpers: Rewrite description
03aa87e Documentation: Describe other situations where -z affects git diff
77bc694 rebase-interactive: silence warning when no commits rewritten
636db2c t3301: add tests to use --format="%N"

Häufige Optionen

Die Anzahl der angezeigten Commits begrenzen:

git log -n <number>

Zum Beispiel die letzten 5 Commits anzeigen:

git log -n 5

Commits nach dem angegebenen Datum anzeigen:

git log --since="2024-01-01"

Commits vor dem angegebenen Datum anzeigen:

git log --until="2024-07-01"

Nur Commits von einem bestimmten Autor anzeigen:

git log --author="Author Name"

Mehrgit logBefehl kann eingesehen werden unterhttp://git-scm.com/docs/git-logOder verwenden Siegit log --helpBefehl zum Anzeigen von Hilfeinformationen.


git blame

git blameDer Befehl wird verwendet, um Zeile für Zeile anzuzeigen, wer jede Codezeile in der angegebenen Datei eingefügt oder geändert hat und wann.

git blameEr kann die Änderungshistorie jeder Zeile in der Datei verfolgen, einschließlich Informationen wie Autor, Commit-Hash, Commit-Datum und Commit-Nachricht.

Wenn Sie die Änderungshistorie einer angegebenen Datei anzeigen möchten, können Sie den Befehl git blame verwenden, und zwar im folgenden Format:

git blame [选项] <文件路径>

Zu den üblichen Optionen gehören:

  • -L <起始行号>,<结束行号>: Nur Code-Anmerkungen innerhalb des angegebenen Zeilenbereichs anzeigen.
  • -C: Bei umbenannten oder kopierten Codezeilen auch den Ursprung der Codezeile zurückverfolgen.
  • -M: Bei verschobenen Codezeilen auch den Ursprung der Codezeile zurückverfolgen.
  • -C -Coder-M -M: Bei Codezeilen mit erheblichen Änderungen eine weitergehende Rückverfolgung durchführen.
  • --show-stats: Statistiken zur Zeilenanzahl für jeden Autor anzeigen.

: Code-Anmerkungen und zugehörige Informationen für jede Zeile einer Datei anzeigen:

git blame <文件路径>

Nur Code-Anmerkungen innerhalb des angegebenen Zeilenbereichs anzeigen:

git blame -L <起始行号>,<结束行号> <文件路径>

Ursprung umbenannter oder kopierter Codezeilen nachverfolgen:

git blame -C <文件路径>

: Ursprung verschobener Codezeilen nachverfolgen:

git blame -M <文件路径>

: Zeilenanzahlstatistiken anzeigen:

git blame --show-stats <文件路径>

Der Befehl git blame zeigt Änderungseinträge in einer Liste an, wie im folgenden Beispiel:

$ git blame README 
^d2097aa (tianqixin 2020-08-25 14:59:25 +0800 1) # Example Git 测试
db9315b0 (example    2020-08-25 16:00:23 +0800 2) # Example 

Für weitere Inhalte können Siegit blame --helpverwenden, um die vollständige Hilfedokumentation anzuzeigen und mehr über Optionen und Nutzung zu erfahren.


Wiederherstellung und Rollback

Git bietet mehrere Möglichkeiten, wiederherzustellen und zu früheren Versionen zurückzurollen; unterschiedliche Befehle eignen sich für unterschiedliche Szenarien und Anforderungen.

Hier sind mehrere gängige Methoden:

  • git checkout: Branches wechseln oder Dateien auf einen angegebenen Commit zurücksetzen.
  • git reset: Den aktuellen Branch auf den angegebenen Commit zurücksetzen (Soft Reset, Mixed Reset, Hard Reset).
  • git revert: Einen neuen Commit erstellen, um den angegebenen Commit rückgängig zu machen, ohne die Commit-Historie zu ändern.
  • git reflog: Historische Operationsaufzeichnungen anzeigen und verlorene Commits wiederherstellen.

1. git checkout: Eine bestimmte Version einer Datei auschecken

Der Befehl git checkout wird verwendet, um Branches zu wechseln oder Dateien im Arbeitsverzeichnis auf einen bestimmten Commit zurückzusetzen.

Dateien im Arbeitsverzeichnis auf einen bestimmten Commit zurücksetzen:

git checkout <commit> -- <filename>

Zum Beispiel file.txt auf die Version beim Commit abc123 zurücksetzen:

git checkout abc123 -- file.txt

Zu einem bestimmten Commit wechseln:

git checkout <commit>

Zum Beispiel:

git checkout abc123

Wenn Sie auf diese Weise zu einem bestimmten Commit wechseln, befinden Sie sich in einem detached HEAD-Zustand.

2. git reset: Den aktuellen Branch auf einen bestimmten Commit zurücksetzen

Der Befehl git reset kann die Commit-Historie des aktuellen Branches ändern. Er hat drei Hauptmodi: --soft, --mixed und --hard.

--soft: Nur HEAD auf den angegebenen Commit zurücksetzen, wobei der Staging-Bereich und das Arbeitsverzeichnis unverändert bleiben.

git reset --soft <commit>

--mixed (Standard): HEAD auf den angegebenen Commit zurücksetzen, den Staging-Bereich zurücksetzen, aber das Arbeitsverzeichnis unverändert lassen.

git reset --mixed <commit>

--hard: HEAD auf den angegebenen Commit zurücksetzen, wobei sowohl der Staging-Bereich als auch das Arbeitsverzeichnis zurückgesetzt werden.

git reset --hard <commit>

Zum Beispiel den aktuellen Branch auf den Commit abc123 zurücksetzen:

git reset --hard abc123

3. git revert: Einen Commit rückgängig machen

Der Befehl git revert erstellt einen neuen Commit, um den angegebenen Commit rückgängig zu machen. Er ändert nicht die Commit-Historie und eignet sich für Commits, die bereits in ein Remote-Repository gepusht wurden.

git revert <commit>

Zum Beispiel Commit abc123 rückgängig machen:

git revert abc123

4. git reflog: Historische Operationsaufzeichnungen anzeigen

Der Befehl git reflog zeichnet alle HEAD-Bewegungen auf. Selbst wenn Commits gelöscht oder zurückgesetzt werden, können sie über reflog wiederhergestellt werden.

git reflog

Mit reflog kann ein vorheriger Commit-Hash gefunden und ein bestimmter Zustand wiederhergestellt werden. Zum Beispiel:

git reset --hard HEAD@{3}

Beispiel

Das folgende ist ein umfassendes Beispiel, das zeigt, wie diese Befehle verwendet werden, um historische Versionen wiederherzustellen:

Commit-Historie anzeigen:

git log --oneline

Angenommen, die Ausgabe sieht wie folgt aus:

abc1234 Commit 1
def5678 Commit 2
ghi9012 Commit 3

Zu Commit 2 wechseln (im detached HEAD-Zustand):

git checkout def5678

Auf Commit 2 zurücksetzen, Änderungen in der Staging-Area beibehalten:

git reset --soft def5678

Auf Commit 2 zurücksetzen, die Änderungen aus dem Staging-Bereich entfernen:

git reset --mixed def5678

Auf Commit 2 zurücksetzen und alle Änderungen verwerfen:

git reset --hard def5678

Commit 2 rückgängig machen:

git revert def5678

Reflog anzeigen, um verlorene Commits wiederherzustellen:

git reflog

Den vorherigen Commit-Hash finden und wiederherstellen:

git reset --hard HEAD@{3}
Weitere Erweiterungen