Skip to content

Commit ee0c55c

Browse files
committed
add git cmake guide
1 parent 41c950a commit ee0c55c

3 files changed

Lines changed: 528 additions & 0 deletions

File tree

src/other/5 git.md

Lines changed: 309 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,309 @@
1+
---
2+
title: git 常用命令
3+
order: 2
4+
category:
5+
- 其他
6+
tag:
7+
- git
8+
editLink: false
9+
---
10+
11+
Git 是最常用的版本控制工具之一,广泛用于开发和项目管理中。以下是一些常用的 Git 命令及其详细说明:
12+
13+
## 常用 Git 命令及其说明
14+
15+
### repository 操作
16+
17+
1. **git init**
18+
- **作用**:本地初始化一个新的 Git 仓库。
19+
- **用法**:在一个空目录中运行 `git init`,Git 会创建一个 `.git` 目录,用于存储仓库的元数据。
20+
21+
```bash
22+
git init
23+
```
24+
25+
2. **git clone**
26+
- **作用**:从远程仓库克隆一个仓库到本地。
27+
- **用法**`git clone` 后跟仓库 URL,可以将远程仓库复制到本地。
28+
29+
```bash
30+
git clone https://github.com/user/repository.git
31+
```
32+
33+
3. **git remote**
34+
- **作用**:管理远程仓库地址。
35+
- **用法**
36+
- 查看当前的远程仓库:`git remote -v`
37+
- 添加新的远程仓库:`git remote add origin https://github.com/user/repo.git`
38+
- 删除远程仓库:`git remote remove origin`
39+
40+
```bash
41+
git remote -v # 查看远程仓库
42+
git remote add origin https://github.com/user/repo.git # 添加远程仓库
43+
```
44+
45+
## 修改管理
46+
47+
### 1. **git add**
48+
- **作用**:将文件添加到暂存区(stage),为下次提交做准备。
49+
- **用法**`git add` 后跟文件路径,或使用 `.` 添加当前目录下的所有更改。
50+
51+
```bash
52+
git add file.txt
53+
git add .
54+
```
55+
56+
### 2. **git commit**
57+
- **作用**:提交暂存区的更改,生成新的提交。
58+
- **用法**`git commit` 通常跟 `-m` 选项来添加提交信息,描述本次提交的内容。
59+
60+
```bash
61+
git commit -m "Add new feature"
62+
```
63+
- **修改commit信息**: 使用 `--amend` 修改最后一次提交的信息或内容。
64+
65+
```bash
66+
git commit --amend -m "Corrected commit message"
67+
```
68+
- **多次提交合并**:使用 `rebase` 合并最近几次的commit。
69+
70+
```bash
71+
git rebase -i HEAD~n
72+
```
73+
74+
### 3. **git status**
75+
- **作用**:显示工作目录和暂存区的状态,查看哪些文件有更改、哪些文件被暂存、哪些文件未被跟踪。
76+
- **用法**:运行 `git status` 可以看到当前分支的状态信息。
77+
78+
```bash
79+
git status
80+
```
81+
82+
### 4. **git log**
83+
- **作用**:显示仓库的提交历史记录。
84+
- **用法**`git log` 列出当前分支的所有提交。你可以使用 `--oneline` 选项简化输出,或者 `--graph` 查看分支图形。
85+
86+
```bash
87+
git log
88+
git log --oneline
89+
git log --graph --oneline
90+
```
91+
92+
### 5. **git diff**
93+
- **作用**:查看工作目录、暂存区和最新提交之间的差异。
94+
- **用法**`git diff` 显示未暂存的更改,`git diff --staged` 显示已暂存但未提交的更改。
95+
96+
```bash
97+
git diff
98+
git diff --staged
99+
```
100+
101+
### 6. **git checkout**
102+
- **作用**:恢复工作目录中文件的状态。
103+
- **用法**`git checkout --` 后跟文件。
104+
105+
```bash
106+
git checkout feature-branch
107+
git checkout -- file.txt # 恢复文件
108+
```
109+
### 7. **git stash**
110+
- **作用**:保存当前工作目录的更改,以便稍后恢复,而不影响当前的代码提交历史。
111+
- **用法**`git stash` 可以在不提交代码的情况下保存未完成的工作。
112+
113+
```bash
114+
git stash
115+
git stash pop # 恢复工作
116+
```
117+
118+
### 8. **git reset**
119+
- **作用**:重置当前分支的提交历史或工作目录状态,回退到之前的某个提交点。
120+
- **用法**
121+
- `git reset --soft`:保留工作区文件,只回退提交。
122+
- `git reset --hard`:丢弃工作区文件和提交历史。
123+
124+
```bash
125+
git reset --soft HEAD~1 # 回退一提交,但保留工作目录更改
126+
git reset --hard HEAD~1 # 丢弃更改
127+
```
128+
129+
## 分支管理
130+
131+
### 1. **git checkout**
132+
- **作用**:切换分支。
133+
- **用法**`git checkout` 后跟分支名称,切换到指定分支
134+
135+
```bash
136+
git checkout feature-branch
137+
git checkout -b feature-branch #创建并切换分支
138+
```
139+
140+
### 2. **git branch**
141+
- **作用**:管理分支。列出、创建或删除分支。
142+
- **用法**
143+
- 列出分支:`git branch`
144+
- 创建新分支:`git branch branch_name`
145+
- 删除分支:`git branch -d branch_name`
146+
147+
```bash
148+
git branch # 列出所有分支
149+
git branch feature-branch # 创建新分支
150+
git branch -d feature-branch # 删除分支
151+
```
152+
153+
### 3. **git merge**
154+
- **作用**:合并分支,将指定分支的更改合并到当前分支。
155+
- **用法**`git merge` 后跟要合并的分支名称。
156+
157+
```bash
158+
git merge feature-branch
159+
```
160+
161+
### 4. **git rebase**
162+
- **作用**:将当前分支的更改应用到另一分支的顶端,从而保持线性历史。
163+
- **用法**`git rebase` 可以让你的提交历史保持整洁。
164+
165+
```bash
166+
git rebase main
167+
```
168+
169+
## 数据同步
170+
171+
### 1. **git pull**
172+
- **作用**:从远程仓库拉取更改并合并到本地分支。相当于 `git fetch``git merge`
173+
- **用法**`git pull` 默认从当前跟踪的远程分支拉取更新。
174+
175+
```bash
176+
git pull origin main
177+
```
178+
179+
### 2. **git push**
180+
- **作用**:将本地分支的提交推送到远程仓库。
181+
- **用法**`git push` 将更改推送到远程分支。
182+
183+
```bash
184+
git push origin main
185+
```
186+
187+
### 3. **git fetch**
188+
- **作用**:从远程仓库获取最新的提交和分支信息,但不合并到本地分支。
189+
- **用法**`git fetch` 会下载远程仓库的所有更改,但不会自动合并。
190+
191+
```bash
192+
git fetch origin
193+
```
194+
195+
## 管理 Submodule
196+
Git Submodule 是一个非常有用的功能,允许你在一个 Git 仓库中包含另一个独立的 Git 仓库。这对于需要将多个项目组合在一起的场景非常实用,例如一个大型项目包含多个子模块。以下是常见的 Git Submodule 操作和使用场景的详细介绍。
197+
198+
### 1. **添加 Submodule**
199+
- **作用**:在你的项目中添加一个子模块,它指向另一个 Git 仓库。
200+
- **命令**
201+
202+
```bash
203+
git submodule add <repository_url> <path>
204+
```
205+
206+
示例:
207+
208+
```bash
209+
git submodule add https://github.com/example/repo.git libs/repo
210+
```
211+
212+
这会将 `repo` 仓库克隆到当前项目的 `libs/repo` 目录,并将其作为子模块添加。
213+
214+
### 2. **初始化和更新 Submodule**
215+
- **初始化**:当你克隆包含子模块的仓库时,子模块不会自动被克隆。你需要先初始化它们:
216+
217+
```bash
218+
git submodule init
219+
```
220+
221+
- **更新子模块**:初始化之后,使用以下命令克隆并更新子模块到最新提交:
222+
223+
```bash
224+
git submodule update
225+
```
226+
227+
- **克隆仓库时自动初始化和更新子模块**:可以使用 `--recurse-submodules` 选项在克隆时自动初始化并更新所有子模块:
228+
229+
```bash
230+
git clone --recurse-submodules <repository_url>
231+
```
232+
233+
### 3. **查看 Submodule 状态**
234+
- **作用**:显示当前仓库中所有子模块的状态,例如子模块当前指向的 commit。
235+
- **命令**
236+
237+
```bash
238+
git submodule status
239+
```
240+
241+
输出中会显示子模块的哈希、路径以及子模块是否是最新的。
242+
243+
### 4. **更新 Submodule 到最新版本**
244+
- **作用**:如果子模块的上游仓库有新的提交,你可以将子模块更新到最新版本。
245+
- **命令**
246+
247+
进入子模块目录,然后拉取最新的更改:
248+
249+
```bash
250+
cd libs/repo
251+
git pull origin main
252+
```
253+
254+
回到主项目后,提交子模块的更新:
255+
256+
```bash
257+
git add libs/repo
258+
git commit -m "Update submodule"
259+
```
260+
261+
### 5. **删除 Submodule**
262+
- **作用**:从项目中移除子模块。
263+
- **步骤**
264+
265+
1. **删除子模块的条目**:从 `.gitmodules` 文件中移除子模块条目。
266+
267+
2. **删除子模块配置**:从 `.git/config` 文件中移除子模块的配置条目。
268+
269+
3. **删除子模块目录**:手动删除子模块目录并从版本控制中移除:
270+
271+
```bash
272+
git rm -f libs/repo
273+
```
274+
275+
4. **提交更改**
276+
277+
```bash
278+
git commit -m "Remove submodule"
279+
```
280+
281+
### 6. **将 Submodule 更新到特定的 Commit**
282+
- **作用**:在某些场景下,你可能希望子模块保持在特定的 commit,而不是跟随最新的更改。
283+
- **命令**
284+
285+
进入子模块目录,检查出所需的 commit:
286+
287+
```bash
288+
cd libs/repo
289+
git checkout <commit_hash>
290+
```
291+
292+
回到主项目,添加并提交子模块的状态:
293+
294+
```bash
295+
git add libs/repo
296+
git commit -m "Update submodule to specific commit"
297+
```
298+
299+
### 7. **嵌套 Submodule**
300+
子模块本身也可以包含子模块,称为嵌套子模块。这些子模块的操作与普通子模块类似,但需要特别注意初始化和更新嵌套结构时可能出现的复杂性。
301+
302+
### 8. **处理 Submodule 的常见问题**
303+
- **子模块指针未更新**:当你更新子模块后,可能会忘记将更新提交到主仓库。确保更新完子模块后,执行 `git add``git commit` 将指针的变化保存到主仓库。
304+
- **子模块无法初始化或更新**:确保子模块的 URL 正确,并且你有相应的权限克隆子模块。
305+
306+
::: tip 总结
307+
Git Submodule 是在大型项目或多仓库项目中非常有用的功能,可以让你更好地组织代码。通过上述命令,你可以轻松地添加、更新、管理和删除子模块。掌握这些操作将帮助你有效地管理项目依赖关系和模块化代码结构。
308+
:::
309+

0 commit comments

Comments
 (0)