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