Artikelverzeichnis
Git-Studiennotizen
Studienartikel 1
Studienartikel 2
Studienartikel 3
Was ist Git?
Git ist ein verteiltes Open-Source-Versionskontrollsystem. Die Versionskontrolle ist ein System, das Änderungen im Dateiinhalt aufzeichnet und Revisionen bestimmter Versionen konsultiert.
Lagerhaus
Aussage 1
Aussage 2
Obwohl es zwei Versionen gibt, ist die allgemeine Bedeutung dieselbe: Die ersten drei Bereiche sind alle lokal, nur das Remote-Warehouse ist nicht lokal.
Lokales Lager = Arbeitsbereich + Versionsbereich
- Arbeitsbereich: Eine Sammlung von Dateien auf einer lokalen Festplatte
- Der Versionsbereich (Versionsbibliothek) ist
.git
eine Datei.git init
Dies bedeutet, dass eine.git
Datei im lokalen Bereich erstellt wird, dh ein Versionsbereich erstellt wird
Versionsbereich = Zwischenlagerbereich + Lagerbereich
- Temporärer Speicherbereich: Dateien
.git
im Verzeichnis , über die die Workspace-Dateien zum temporären Speicherbereich hinzugefügt werden könnenindex
git add
- Lagerbereich:
git commit
Dateien im Zwischenspeicherbereich können an den Lagerbereich übermittelt werden, um eine historische Version zu erstellen
Häufige Prozessfälle
git init
Initialisieren Sie diese Datei und verwandeln Sie sie in ein Repository, das Git verwalten kann. Öffnen Sie nach der Initialisierung die versteckte Datei und Sie können sehen, dass eine.git
Datei vorhanden ist.git add .
Senden Sie die gesamte Datei an den Staging-Bereich.git commit -m "评论"
Senden Sie alle Dateien im temporären Speicherbereich an das lokale Lager.git remote add origin 仓库地址
Verbinden Sie das lokale Repository mit dem Remote-Repository auf GitHub. Einfach einmal anschließen und jederzeit nutzen.git push -u origin master
Übermitteln Sie das lokale Lager an das Remote-Lager.
allgemeine Befehle
Anweisung | beschreiben | Gemeinsame Nutzung |
---|---|---|
Git hinzufügen | Fügen Sie Dateien in diesem Bereich zum temporären Speicherbereich hinzu, der wie der temporäre Speicherbereich mehrmals hinzugefügt werden kann | Dateien zum temporären Speicherbereich hinzufügen: git add 文件名 Alle Dateien zum temporären Speicherbereich hinzufügen: git add . Geänderte Dateien zum temporären Speicherbereich hinzufügen: git add -A Dateien im temporären Speicherbereich löschen: git rm --cached 文件名 |
Git-Commit | Senden Sie alle Dateien im temporären Speicherbereich an den Lagerbereich, um eine historische Version zu erstellen | Dateien einreichen: git commit -m ”版本日志信息" 文件名 Alle Dateien einreichen: git commit -m ”版本日志信息” |
Git-Status | Den Status des Lagerbereichs (örtliche Bibliothek) anzeigen | Die rote Datei wurde nicht zum temporären Speicherbereich hinzugefügt und die grüne Datei wurde zum temporären Speicherbereich hinzugefügt |
git show commit hash value | Zeigen Sie den geänderten Inhalt eines Commits an |
git commit --amend
Drücken Sie die Eingabetaste, um die letzten Commit-Informationen zu ändern. Nach dem Push wird kein neuer Commit-Datensatz hinzugefügt, aber der Hash dieses Commits wird geändert (dies kann als Löschen des letzten Commits und erneutes Senden verstanden werden).git commit -m "msg" --no-verify
Commit erzwingen, ohne es zu überprüfen
Commit-Kommentarspezifikation
Anfang | Anmerkung |
---|---|
Kunststück: | Neue Funktionen, neue Features |
Fix: | Fehler ändern |
perf: | Ändern Sie den Code, um die Leistung zu verbessern (optimieren Sie die Leistung des Programms, ohne das interne Verhalten des Codes zu beeinträchtigen). |
Refaktor: | Code-Refactoring (Refactoring, Code-Änderung ohne Auswirkungen auf das interne Verhalten und die Funktionen des Codes) |
Dokumente: | Dokumentänderung |
Stil: | Beachten Sie, dass es sich bei der Änderung des Codeformats nicht um eine CSS-Änderung handelt (z. B. eine Semikolon-Änderung). |
prüfen: | Testfälle hinzufügen und ändern |
bauen: | Wirkt sich auf die Projekterstellung oder Abhängigkeitsänderung aus |
zurückkehren: | Kehren Sie zum letzten Commit zurück |
ci: | Kontinuierliche Dateiänderung im Zusammenhang mit der Integration |
Aufgabe: | Sonstige Modifikationen (Modifikationen, die nicht in die oben genannten Kategorien fallen) |
freigeben: | eine neue Version veröffentlichen |
Arbeitsablauf: | Workflowbezogene Dateiänderung |
Legen Sie die Git-Ignorierdatei unter file.gitignore fest
Welche Dateien werden ignoriert?
Am Beispiel des Vue-Projekts muss das von node_modules heruntergeladene Abhängigkeitspaket nicht hochgeladen werden, da die Datei zu groß ist und eine Paketverwaltungsdatei vorhanden ist. Sie können die Paketverwaltungsdatei verwenden, um Abhängigkeiten erneut herunterzuladen package.json
.
Ignorieren Sie einige, die nichts mit der eigentlichen Funktion des Projekts zu tun haben, z. B. das .vscode
Warten auf IDE-Dateien.
Zweck
1. Die Unterschiede zwischen IDE-Tools abschirmen.
2. Dateien so klein wie möglich hochladen, damit andere sie schneller herunterladen und eine bessere bereitstellen können Erfahrung
So ignorieren Sie
1. Erstellen Sie eine Ignorierregeldatei xxx.ignore
. Der Vorschlag besteht darin, den Verweis auf die Datei (in .git) git.ignore
zu erleichtern ~/.gitconfig
. Es wird empfohlen, sie im selben Verzeichnis abzulegen, oder Sie können sie direkt ändern~/.gitconfig
git.ignore-Dateivorlage, nehmen Sie das Vue-Projekt als Beispiel
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
.gitconfig
zitiert in
// 注意斜线的方向
excludesfile = 绝对路径/git.ignore
Versionsverwaltung
Nachdem ich einen sehr interessanten Artikel gelesen habe, denke ich, dass er aus Gründen der Versionskontrolle hilfreich ist: Git-Änderung rückgängig machen, Git-Checkout-Datei verwenden, Git-Reset-HEAD-Datei verwenden
git log | git reflog Commit-Protokoll/historische Version anzeigen
Bei Steuerungsmethode für die Mehrbildschirmanzeige: Leertaste zum Umblättern der Seite nach unten, b Umblättern nach oben, q Beenden
Vollständigen Versionsverlauf anzeigen:git log
D:\work_code\demo\vue3_test>git log
commit eca39ce053d6a6c7650c10c6ab80d174cbbe3fcd (HEAD -> master)
Author: Ranan <ranan>
Date: Fri Aug 25 19:20:25 2023 +0800
modify
commit 36d5ec0bfa96ba0beb59e765de03024f383c9ae9
Author: Ranan <ranan>
Date: Fri Aug 25 18:44:37 2023 +0800
init
Zu den zurückgegebenen Informationen gehören Commit-UUID( commit 完整版本号
), aktueller Zweig, Autor, Protokoll und Beschreibungsinformationen.
Gekürzten Versionsverlauf anzeigen:git reflog
HEAD@{Wie viele Schritte müssen zur aktuellen Version verschoben werden}, die Zahl davor gibt den Hashwert dieser Version an.
D:\work_code\demo\vue3_test>git reflog
eca39ce (HEAD -> master) HEAD@{
0}: commit: modify
36d5ec0 HEAD@{
1}: commit (initial): init
Der Unterschied
git reflog
zeichnet jeden Befehl auf und Sie können alle Betriebsaufzeichnungen aller Zweige anzeigen.
git log
Versionen, die nach der Backtracking-Version festgeschrieben wurden, werden weder angezeigt, noch können Sie gelöschte Datensätze anzeigen.
Version Shuttle Git Reset
Essenz: Betätigen Sie den HEAD-Zeiger. Der HEAD-Zeiger ist standardmäßig auf die neueste Version eingestellt.
Befehl: git reset 强度 局部hash
(empfohlene Verwendung)
Stärke | Wiederherstellung des Kopfzeigers | Der Cache-Bereich, der hinzugefügt wurde | Arbeitsbereichscode | beschreiben |
---|---|---|---|---|
--soft commithash |
√ | nicht verloren | Konstante | Führen Sie vom Commit nach dem Commithash einen Rollback zum Staging-Bereich durch |
--mixed commithash |
√ | verloren | Konstante | |
--hard commithash |
√ | verloren | Zurück zur Shuttle-Version |
Wenn Sie git reset
zur alten Version wechseln, git push
wird bei der Verwendung ein Fehler gemeldet, da HEAD
die Version, auf die das lokale Repository verweist, älter ist als die Version des Remote-Repositorys.
Lösung: git push -f
Push erzwingen, und alle neuen Versionen nach dieser Version verschwinden.
Häufige Verwendungsszenarien
Nach dem Ausführen des Commits und vor dem Ausführen des Pushs möchten Sie dieses Commit rückgängig machen:git reset --soft HEAD^
andere Verwendung
git reset --hard head #当前版本
git reset --hard HEAD^ #回退到上一个版本
git reset --hard HEAD^^ #回退到上上一个版本
git reset --hard HEAD~3 #回退到往上3个版本
git reset --hard HEAD~10 #回退到往上10个版本
Anwendungsfälle
Verwenden Sie zuerst git reflog
, um die Version der lokalen Bibliothek und den entsprechenden lokalen hash
Wert anzuzeigen, und verwenden Sie dann git reset --hard 局部hash
die Backtracking-Version
// 案例: 回到版本36d5ec0
D:\work_code\demo\vue3_test>git reset --hard 36d5ec0
HEAD is now at 36d5ec0 init
D:\work_code\demo\vue3_test>git reflog
36d5ec0 (HEAD -> master) HEAD@{
0}: reset: moving to 36d5ec0
eca39ce HEAD@{
1}: commit: modify
36d5ec0 (HEAD -> master) HEAD@{
2}: commit (initial): init
D:\work_code\demo\vue3_test>git log
commit 36d5ec0bfa96ba0beb59e765de03024f383c9ae9 (HEAD -> master)
Author: Ranan <ranan>
Date: Fri Aug 25 18:44:37 2023 +0800
init
Version vorwärts
// 案例: 前进到modify版本
D:\work_code\demo\vue3_test>git reset --hard eca39ce
HEAD is now at eca39ce modify
D:\work_code\demo\vue3_test>git reflog
eca39ce (HEAD -> master) HEAD@{
0}: reset: moving to eca39ce
36d5ec0 HEAD@{
1}: reset: moving to 36d5ec0
eca39ce (HEAD -> master) HEAD@{
2}: commit: modify
36d5ec0 HEAD@{
3}: commit (initial): init
D:\work_code\demo\vue3_test>git log
commit eca39ce053d6a6c7650c10c6ab80d174cbbe3fcd (HEAD -> master)
Author: Author: Ranan <ranan>
Date: Fri Aug 25 19:20:25 2023 +0800
modify
commit 36d5ec0bfa96ba0beb59e765de03024f383c9ae9
Author: Author: Ranan <ranan>
Date: Fri Aug 25 18:44:37 2023 +0800
init
git reset HEAD
Befehl: git reset HEAD <file>
Beschreibung: Ziehen Sie die zuletzt an das Repository übermittelte Datei in den temporären Speicherbereich, ohne dass sich dies auf den Arbeitsbereich auswirkt
Ziehen Sie die Datei aus dem Repository in den Staging-Bereich . Wenn wir eine Datei im Arbeitsbereich durcheinander bringen, können wir mit diesem Befehl die Datei mit demselben Namen im Repository in den temporären Speicherbereich ziehen und sie dann wieder in den Arbeitsbereich zurückziehen.
Hier ist HEAD der Versionszeiger und kann auch der Hashwert anderer Versionsadressen sein.
// 1.工作区修改age为15 add src/App.vue 文件进暂存区
D:\work_code\demo\vue3_test>git add -A
// 2.将仓库区最新版本的该文件拉到暂存区,不影响工作区age还是15
D:\work_code\demo\vue3_test>git reset HEAD src/App.vue
Unstaged changes after reset:
M src/App.vue
todo Es fühlt sich
git rm --cached 文件名
sehr ähnlich an wie das Löschen der Dateien im temporären Speicherbereich. Der Unterschied zwischen ihnen ist beim Lesen des Artikels vorerst nicht spürbar. Er wird nach der Anhäufung von Arbeit aktualisiert.
git checkout – fileName Verwirft Arbeitsbereichsänderungen
Befehl: git checkout -- fileName
Änderung des angegebenen Dateiarbeitsbereichs abbrechen | git checkout .
Änderung aller Dateien im Arbeitsbereich abbrechen
Erläuterung: Es ist verständlich, den Inhalt des Hinzufügens (basierend auf dem letzten Hinzufügen) abzubrechen und alle Änderungen der Datei im Arbeitsbereich abzubrechen (Es gibt keine Möglichkeit, es wiederherzustellen!)
Fallbeschreibung
1. Nach dem Hinzufügen (z. B. einem) wird der Arbeitsbereichscode geändert (zwei hinzufügen) und der git checkout -- fileName
Wiederherstellungsbefehl wird verwendet, um den Arbeitsbereichscode aus dem temporären Speicherbereich abzurufen (nur einer).
2. Zuerst hinzufügen und dann festschreiben ( z. B. eins), Arbeitsbereichscodeänderung (zwei hinzufügen), git checkout -- fileName
den Wiederherstellungsbefehl verwenden, der Arbeitsbereich wird aus dem Lagerbereich wiederhergestellt (nur einer)
Es gibt eine Debatte darüber, ob aus dem Bereitstellungsbereich oder dem Lagerbereich gezogen werden soll. Mein vorübergehendes Verständnis besteht darin, zuerst zum temporären Lagerbereich und dann zum Lagerbereich ohne temporären Lagerbereich zu gehen.
Die Funktion der Gebrauchsanweisungsoption
--
besteht darin, anzugeben, dass es sich bei dem Inhalt um ein Verzeichnis oder eine Datei und nicht um einen Zweignamen handelt, um zu vermeiden, dass der Dateiname mit dem Zweignamen übereinstimmt und ein Fehler auftritt, da direkt git checkout
Das spätere Hinzufügen des Zweignamens wird zu einem Wechselzweig, der garantiert nicht verwechselt wird und als Nächstes direkt verwendet werden kanngit checkout <file>
Git zurücksetzen
Befehl: git revert -n 版本号
Essenz: git revert
Wird verwendet, um eine bestimmte Version „umzukehren“, um den Zweck zu erreichen, die Änderung dieser Version rückgängig zu machen.
Beispiel: commit
Nachdem Sie drei Versionen erstellt haben (Version 1, Version 2 und Version 3), stellen Sie plötzlich fest, dass Version 2 nicht funktioniert (z. B. liegt ein Fehler vor). Wenn Sie Version 2 widerrufen möchten, aber keine Auswirkungen darauf haben möchten Wenn Sie die Version 3 widerrufen, können Sie git revert -n 版本二的版本号
stattdessen den Befehl zum Ausführen von Version 2 verwenden und eine neue Version 4 generieren. In dieser Version 4 werden die Dinge von Version 3 beibehalten, aber die Dinge von Version 2 werden widerrufen.
Beschreibung: Erstellen Sie eine neue Übermittlung, um die alte Übermittlung zu überschreiben. Die widerrufene Übermittlung und der neue Übermittlungsdatensatz werden gespeichert
Git stellt die vorherige Version der beiden Methoden „Reset“ und „Revert“ wieder her
Befehl | Prinzip | Anwendbare Szene |
---|---|---|
Git zurückgesetzt | Ändern Sie den Speicherort von HEAD, dh ändern Sie den Speicherort, auf den HEAD zeigt, in eine zuvor vorhandene Version | Kehren Sie zu einer zuvor übermittelten Version zurück. Die nach dieser Version übermittelte Version wird nicht benötigt |
gibt zurück | Es wird verwendet, um eine bestimmte Version „umzukehren“, um den Zweck zu erreichen, die Änderung dieser Version rückgängig zu machen. | Wenn Sie eine frühere Version widerrufen, aber auch die Version nach der Zielversion behalten möchten, zeichnen Sie den gesamten Versionsänderungsprozess auf |
Git Zusammenführung rückgängig machen | Git zurücksetzen
Wenn git revert einen bestimmten Commit abbricht, müssen zwei Commits berücksichtigt werden
- Regelmäßige Commit-
git commit
Übermittlung, nur ein übergeordnetes Commit - Nachdem der Merge-Commit
git merge
zwei Zweige zusammengeführt hat, wird ein neuer Merge-Commit mit zwei übergeordneten Commits erstellt
git show
Merge-Commits anzeigen mit
➜ git show bd86846
commit bd868465569400a6b9408050643e5949e8f2b8f5
Merge: ba25a9d 1c7036f
# merge commit bd86846是从 ba25a9d 和 1c7036f 两个 commit 合并过来的。
Befehl: git revert -m 选项 需要撤销的merge哈希值
-m
Der von der Option empfangene Parameter ist eine Zahl, und der Wert der Zahl ist 1 und 2, also der erste oder der zweite, der in der Merge-Zeile aufgeführt ist.
Klassischer Fall: https://www.cnblogs.com/bescheiden/articles/10563651.html
Zusammenfassen
1. Code im Arbeitsbereich
git checkout -- 文件名 #丢弃某个文件的修改
git checkout . #丢弃全部
Alle Includes verwerfen: Neu hinzugefügte Dateien werden gelöscht, gelöschte Dateien werden wiederhergestellt und geänderte Dateien werden zurückgegeben. Die Änderung basiert auf dem letzten Hinzufügen oder Festschreiben.
2. Der Code wird ohne Commit-Übermittlung zum temporären Speicherbereich hinzugefügt
git reset HEAD <file> #从最近的版本将该文件拉取到暂存区
git reset HEAD .
Es wird nur der Bereitstellungsbereich geändert, nicht der Arbeitsbereich.
Filialleitung
Programmierer trennen ihre Arbeit von der Hauptentwicklungslinie, und die Entwicklung eigener Zweige hat keinen Einfluss auf den Betrieb der Hauptzweiglinie.
Vorteil
- Fördern Sie gleichzeitig die Entwicklung mehrerer Funktionen parallel, um die Entwicklungseffizienz zu verbessern
- Wenn während des Entwicklungsprozesses jedes Zweigs die Entwicklung eines bestimmten Zweigs fehlschlägt, hat dies keine Auswirkungen auf andere Zweige. Fehlgeschlagene Zweige können gelöscht und neu gestartet werden
git branch
Zeigen Sie an, in welchem Zweig sich die aktuelle Arbeit befindet. Der Zeiger
HEAD
zeigt auf den lokalen Zweig der aktuellen Arbeit , der als Alias des aktuellen Zweigs verstanden werden kann.
Zweigbeschreibung
- Beim Zweigwechsel werden Dateien in Ihrem Arbeitsverzeichnis geändert.
Beachten Sie beim Wechseln von Zweigen, dass Dateien in Ihrem Arbeitsverzeichnis geändert werden. Wenn Sie zu einem älteren Zweig wechseln, wird Ihr Arbeitsverzeichnis auf den Zustand zurückgesetzt, in dem es war, als der Zweig zuletzt festgeschrieben wurde. Wenn Git dies nicht sauber ausführen kann, wird der Zweigwechsel verboten. - Wenn Sie nicht angeben, welcher Zweig (Quellzweig) der neue Zweig (Zielzweig) erstellt werden soll, wird er standardmäßig
master
aus dem Zweig erstellt. Wenn der Zielzweig erstellt wird, erbt er zu diesem Zeitpunkt alle Commits des Quellzweigs.
Allgemeine Zweiganweisungen
Befehlsname | Wirkung |
---|---|
Git-Branch-Branch-Name | Erstellen Sie einen Zeiger auf das Commit-Objekt, auf dem Sie sich gerade befinden, und nennen Sie ihn den Zweignamen. |
git branch -v | Zweig ansehen |
Name des Git-Checkout-Zweigs | Wechseln Sie die Zweige und ändern Sie die Ausrichtung des HEAD-Zeigers |
git checkout -b Zweigname | Erstellen Sie basierend auf dem aktuellen Zweig den angegebenen Zweig, der + entspricht, und wechseln Sie zu diesem git branch 分支名 git checkout 分支名 |
git merge branchname | Führt den angegebenen Zweig mit dem aktuellen Zweig zusammen |
git branch -D Zweigname | Um einen lokalen Zweig zu löschen, muss dies in anderen Zweigen erfolgen |
git push origin -D [BranchName] | Remote-Zweig löschen |
Erstellen Sie beispielsweise einen Entwicklungszweig
Spezifikation für die Filialverwaltung
Referenzartikel: https://juejin.cn/post/6844903945245048846
- Entwickler implementieren neue Funktionen im Entwicklungszweig
- Feature-Zweig
- Entwickeln Sie ein unabhängiges neues Feature (nach Abschluss muss es in den Entwicklungszweig integriert werden).
- Technische Recherche und Versuche (bei Fehlschlagen können Sie den Feature-Zweig jederzeit löschen)
- Implementieren Sie die Funktionen, die in der nächsten Version entwickelt werden müssen, vorzeitig (werden in dieser Iteration möglicherweise nicht veröffentlicht).
Zweigverschmelzung
Wenn beim Zusammenführen von Zweigen kein Konflikt vorliegt und der Zweig in eine Richtung und eine Zeile vererbt wird, verwendet Git fast forword
diesen Modus. Einige schnelle Zusammenführungen sind jedoch nicht erfolgreich. Wenn kein Konflikt vorliegt, wird die Zweigverwaltungsstrategie ausgelöst , und Git wird automatisch einen neuen Submit veranlassen .
git merge [branchName] --squash
Füge branchName mit dem aktuellen Branch zusammen und führe alle Commits für branchName zu einem Commit zusammen
Git Rebase
Referenzartikel: https://blog.csdn.net/weixin_42310154/article/details/119004977
Zusammenfassung der Schlussfolgerungen: Es wird nicht empfohlen,
den neuesten Code des öffentlichen Zweigs abzurufen – Rebase git pull -r
oder git pull --rebase
.
Der Vorteil besteht darin, dass der Einreichungsdatensatz relativ prägnant ist.
Der Nachteil besteht darin, dass Sie nach dem Rebase nicht wissen, aus welchem Zweig der aktuelle Zweig zuerst gezogen wurde, da sich die Basis geändert hat.
git stash 临时存储当前的工作现场
使用场景
正在修改A分支的某个功能时,优先级更高的任务出现了,但是该任务在B分支。
①提交后切换,代码保存在A分支,但是产生了无意义的提交。
在分支A上做的修改如果没有add或者commit,切换分支之后修改会被携带。
②git stash
将当前修改(未提交的代码)存入暂存区,切换分支B修改完成后,在git stash pop
取出。
git stash
暂存后,工作区代码会恢复到最后一次提交时的代码。
常见命令
命令 | 描述 |
---|---|
git stash | 临时存储当前未commit的工作现场 |
git stash save “message” | 临时存储当前未commit的工作现场,并添加描述。 在多个stash的时候推荐 |
git stash show | 查看刚才暂存的修改 |
git stash show -p stashname | 显示指定的贮藏文件具体改动 |
git stash pop | 切换到临时存储现场的分支后,弹出栈顶的stash |
git stash apply stash@{X} | 换到临时存储现场的分支后,取出相应的暂存。X可使用命令git stash list 查看,省略stash@{X}表示最近一次。 |
git stash drop stash@{X} | 将记录表中取出的对应暂存记录删除。X可使用命令git stash list 查看,省略stash@{X}表示最近一次。 |
git stash list | 查看存储区的所有暂存修改记录 |
使用步骤
- 切换分支B前保存现场,
git stash
或git stash save "message"
- 修改完后,切换分支A再恢复现场,
git stash pop
或git stash apply stash@{X}
恢复现场
存储位置说明
.git/refs/stash
中,存储的是最后一个 stash 对应的节点指针.git/log/refs/stash
中,可以看到全部的 stash 记录信息
Erklären Sie, dass
Git Stash nur geänderte Elemente und auch neue Elemente ausblenden kann.
Lösung:
① Verstecken Sie zunächst git add
in git stash
, die neuen Ergänzungen und Änderungen erfolgreich.
②git stash -u