|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+# Git 学习笔记
|
|
|
2
|
+
|
|
|
3
|
+## 一、Git 简介
|
|
|
4
|
+
|
|
|
5
|
+Git 是一个开源的分布式版本控制系统,用于有效、高速地处理从小到大的项目版本管理。它允许团队成员在本地工作,然后将更改合并到中央仓库中,极大地提高了开发效率和协作便利性。
|
|
|
6
|
+
|
|
|
7
|
+## 二、基本概念
|
|
|
8
|
+
|
|
|
9
|
+1. ##### 仓库(Repository)
|
|
|
10
|
+
|
|
|
11
|
+ 存储项目所有文件和文件夹的完整历史记录,包括每个版本的变更信息。每个项目都有一个仓库,通常在项目根目录下有一个隐藏的 .git 文件夹,里面存放着仓库的元数据。
|
|
|
12
|
+
|
|
|
13
|
+2. ##### 工作区(Working Directory)
|
|
|
14
|
+
|
|
|
15
|
+ 即项目文件夹,是我们进行代码编辑、添加、删除等操作的地方。工作区中的文件可以是未修改的、已修改未暂存的或已暂存的状态。
|
|
|
16
|
+
|
|
|
17
|
+3. ##### 暂存区(Staging Area)
|
|
|
18
|
+
|
|
|
19
|
+ 也称为索引(Index),是一个文件,保存了下次将提交到仓库中的文件列表信息。通过 git add 命令可以将工作区的文件添加到暂存区,暂存区的文件状态会被记录下来,等待提交。
|
|
|
20
|
+
|
|
|
21
|
+4. ##### 提交(Commit)
|
|
|
22
|
+
|
|
|
23
|
+ 将暂存区的文件提交到本地仓库的操作。每次提交都会生成一个唯一的提交 ID,记录了提交时的文件状态、提交信息(如作者、日期、描述等)。通过 git commit 命令完成提交,提交后暂存区会被清空。
|
|
|
24
|
+
|
|
|
25
|
+## 三、基本操作
|
|
|
26
|
+
|
|
|
27
|
+1. ##### 配置 Git
|
|
|
28
|
+
|
|
|
29
|
+ • 全局配置用户名和邮箱:
|
|
|
30
|
+
|
|
|
31
|
+ ~~~bash
|
|
|
32
|
+ git config --global user.name "Your Name"
|
|
|
33
|
+
|
|
|
34
|
+ git config --global user.email "your_email@example.com"
|
|
|
35
|
+ ~~~
|
|
|
36
|
+
|
|
|
37
|
+
|
|
|
38
|
+ • 查看配置信息:
|
|
|
39
|
+
|
|
|
40
|
+ ~~~bash
|
|
|
41
|
+ git config --list
|
|
|
42
|
+ ~~~
|
|
|
43
|
+
|
|
|
44
|
+2. ##### 创建和克隆仓库
|
|
|
45
|
+
|
|
|
46
|
+ • 初始化本地仓库:
|
|
|
47
|
+
|
|
|
48
|
+ ~~~bash
|
|
|
49
|
+ cd project_folder
|
|
|
50
|
+ git init
|
|
|
51
|
+ ~~~
|
|
|
52
|
+
|
|
|
53
|
+ • 克隆远程仓库:
|
|
|
54
|
+
|
|
|
55
|
+ ~~~bash
|
|
|
56
|
+ git clone https://github.com/username/repository.git
|
|
|
57
|
+ ~~~
|
|
|
58
|
+
|
|
|
59
|
+3. ##### 添加和提交文件
|
|
|
60
|
+
|
|
|
61
|
+ • 添加文件到暂存区:
|
|
|
62
|
+
|
|
|
63
|
+ ~~~bash
|
|
|
64
|
+ git add filename
|
|
|
65
|
+ ~~~
|
|
|
66
|
+
|
|
|
67
|
+
|
|
|
68
|
+ 或添加所有修改过的文件:
|
|
|
69
|
+
|
|
|
70
|
+ ~~~bash
|
|
|
71
|
+ git add .
|
|
|
72
|
+ ~~~
|
|
|
73
|
+
|
|
|
74
|
+
|
|
|
75
|
+ • 提交暂存区的文件到本地仓库:
|
|
|
76
|
+
|
|
|
77
|
+ ```bash
|
|
|
78
|
+ git commit -m "Commit message"
|
|
|
79
|
+ ```
|
|
|
80
|
+
|
|
|
81
|
+
|
|
|
82
|
+
|
|
|
83
|
+4. ##### 查看状态和历史
|
|
|
84
|
+
|
|
|
85
|
+ • 查看工作区和暂存区的状态:
|
|
|
86
|
+
|
|
|
87
|
+ ```bash
|
|
|
88
|
+ git status
|
|
|
89
|
+ ```
|
|
|
90
|
+
|
|
|
91
|
+ • 查看提交历史:
|
|
|
92
|
+
|
|
|
93
|
+ ```bash
|
|
|
94
|
+ git log
|
|
|
95
|
+ ```
|
|
|
96
|
+
|
|
|
97
|
+ 可以通过 `git log --oneline` 查看简洁的提交历史,每条提交只显示一行信息。5. 分支管理• 查看当前分支:
|
|
|
98
|
+
|
|
|
99
|
+ ```bash
|
|
|
100
|
+ git branch
|
|
|
101
|
+ ```
|
|
|
102
|
+
|
|
|
103
|
+ • 创建新分支:
|
|
|
104
|
+
|
|
|
105
|
+ ```bash
|
|
|
106
|
+ git branch branch_name
|
|
|
107
|
+ ```
|
|
|
108
|
+
|
|
|
109
|
+ • 切换分支:
|
|
|
110
|
+
|
|
|
111
|
+ ```bash
|
|
|
112
|
+ git checkout branch_name
|
|
|
113
|
+ ```
|
|
|
114
|
+
|
|
|
115
|
+ 或使用 `git switch branch_name` (Git 2.23 之后的新命令)
|
|
|
116
|
+
|
|
|
117
|
+ • 合并分支:
|
|
|
118
|
+
|
|
|
119
|
+ ```bash
|
|
|
120
|
+ git checkout target_branch
|
|
|
121
|
+ git merge source_branch
|
|
|
122
|
+ ```
|
|
|
123
|
+
|
|
|
124
|
+
|
|
|
125
|
+ 将 `source_branch` 分支的更改合并到 `target_branch` 分支中6. 远程仓库操作
|
|
|
126
|
+
|
|
|
127
|
+ • 查看远程仓库信息:
|
|
|
128
|
+
|
|
|
129
|
+ ```bash
|
|
|
130
|
+ git remote -v
|
|
|
131
|
+ ```
|
|
|
132
|
+
|
|
|
133
|
+ • 添加远程仓库:
|
|
|
134
|
+
|
|
|
135
|
+ ```bash
|
|
|
136
|
+ git remote add origin https://github.com/username/repository.git
|
|
|
137
|
+ ```
|
|
|
138
|
+
|
|
|
139
|
+ • 推送本地分支到远程仓库:
|
|
|
140
|
+
|
|
|
141
|
+ ```bash
|
|
|
142
|
+ git push -u origin branch_name
|
|
|
143
|
+ ```
|
|
|
144
|
+
|
|
|
145
|
+ • 从远程仓库拉取更新:
|
|
|
146
|
+
|
|
|
147
|
+ ```bash
|
|
|
148
|
+ git pull origin branch_name
|
|
|
149
|
+ ```
|
|
|
150
|
+
|
|
|
151
|
+## 四、常用技巧
|
|
|
152
|
+
|
|
|
153
|
+1. ##### 撤销修改
|
|
|
154
|
+
|
|
|
155
|
+ • 撤销工作区的修改(未暂存的文件):
|
|
|
156
|
+
|
|
|
157
|
+ ```bash
|
|
|
158
|
+ git checkout -- filename
|
|
|
159
|
+ ```
|
|
|
160
|
+
|
|
|
161
|
+ • 撤销暂存区的修改:
|
|
|
162
|
+
|
|
|
163
|
+ ```bash
|
|
|
164
|
+ git reset HEAD filename
|
|
|
165
|
+ ```
|
|
|
166
|
+
|
|
|
167
|
+2. ##### 查看文件差异
|
|
|
168
|
+
|
|
|
169
|
+ • 查看工作区和暂存区的差异:
|
|
|
170
|
+
|
|
|
171
|
+ ```bash
|
|
|
172
|
+ git diff
|
|
|
173
|
+ ```
|
|
|
174
|
+
|
|
|
175
|
+ • 查看暂存区和本地仓库的差异:
|
|
|
176
|
+
|
|
|
177
|
+ ```bash
|
|
|
178
|
+ git diff --cached
|
|
|
179
|
+ ```
|
|
|
180
|
+
|
|
|
181
|
+3. ##### 标签管理
|
|
|
182
|
+
|
|
|
183
|
+ • 创建标签:
|
|
|
184
|
+
|
|
|
185
|
+ ```bash
|
|
|
186
|
+ git tag tag_name
|
|
|
187
|
+ ```
|
|
|
188
|
+
|
|
|
189
|
+ • 查看标签:
|
|
|
190
|
+
|
|
|
191
|
+ ~~~bash
|
|
|
192
|
+ git tag
|
|
|
193
|
+ ~~~
|
|
|
194
|
+
|
|
|
195
|
+
|
|
|
196
|
+ • 推送标签到远程仓库:
|
|
|
197
|
+
|
|
|
198
|
+ ~~~bash
|
|
|
199
|
+ git push origin tag_name
|
|
|
200
|
+ ~~~
|
|
|
201
|
+
|
|
|
202
|
+4. ##### 忽略文件
|
|
|
203
|
+
|
|
|
204
|
+ 创建 `.gitignore` 文件,在其中列出不需要被 Git 跟踪的文件或文件夹模式,例如:
|
|
|
205
|
+
|
|
|
206
|
+ ~~~cmd
|
|
|
207
|
+ #忽略所有 `.log` 文件
|
|
|
208
|
+ *.log
|
|
|
209
|
+ # 忽略 node_modules 目录
|
|
|
210
|
+ node_modules/
|
|
|
211
|
+ ~~~
|
|
|
212
|
+
|
|
|
213
|
+## 五、常见问题及解决方法
|
|
|
214
|
+
|
|
|
215
|
+1. ##### 冲突解决
|
|
|
216
|
+
|
|
|
217
|
+ 当合并分支时出现冲突,Git 会在冲突文件中标记出冲突部分,需要手动编辑文件解决冲突,然后添加文件到暂存区并提交。
|
|
|
218
|
+
|
|
|
219
|
+2. ##### 忘记添加文件到暂存区就提交了
|
|
|
220
|
+
|
|
|
221
|
+ 可以通过 `git commit --amend` 命令修改最后一次提交,添加遗漏的文件后再提交。
|
|
|
222
|
+
|
|
|
223
|
+3. ##### 无法推送分支到远程仓库
|
|
|
224
|
+
|
|
|
225
|
+ 如果远程仓库有更新,需要先拉取更新再推送,或者使用 `git push -f` 强制推送(需谨慎使用,可能会覆盖远程仓库中的更改)。
|
|
|
226
|
+
|
|
|
227
|
+## 六、进阶操作
|
|
|
228
|
+
|
|
|
229
|
+1. ##### 交互式暂存
|
|
|
230
|
+
|
|
|
231
|
+ 通过 `git add -i` 命令进入交互式暂存模式,可以更精细地选择要暂存的文件或文件块。
|
|
|
232
|
+
|
|
|
233
|
+2. ##### 变基(Rebase)
|
|
|
234
|
+
|
|
|
235
|
+ 将本地分支的更改重新应用到另一个分支上,使提交历史更加整洁。使用 git rebase target_branch 命令,但需注意变基可能会导致历史记录改写,尽量在未推送的本地分支上使用。
|
|
|
236
|
+
|
|
|
237
|
+3. ##### 樱桃采摘(Cherry-pick)
|
|
|
238
|
+
|
|
|
239
|
+ 将特定的提交从一个分支应用到另一个分支。使用 git cherry-pick commit_id 命令,适用于需要将个别重要提交迁移到其他分支的场景。
|
|
|
240
|
+
|
|
|
241
|
+## 七、资源推荐
|
|
|
242
|
+
|
|
|
243
|
+• 官方文档:https://git-scm.com/doc(详细全面,是学习 Git 的权威资料)
|
|
|
244
|
+
|
|
|
245
|
+• Pro Git 书籍:https://git-scm.com/book/zh-tw/v2(内容丰富,适合系统学习)
|
|
|
246
|
+
|
|
|
247
|
+• GitHub 学习资源:https://lab.github.com/(通过实践项目学习 Git 和 GitHub 的使用)。
|