- 1、设置全局配置
- 2、撤销最后一次提交(保留更改)
- 3、修改最后一次提交
- 4、暂存未提交的更改
- 5、高效查看提交历史—以图形方式查看提交历史
- 6、更改提交作者
- 7、检查暂存更改的差异
- 8、使用
<font style="color:rgb(0, 0, 0);">bisect</font>
查找<font style="color:rgb(0, 0, 0);">bug</font>
">8、使用<font style="color:rgb(0, 0, 0);">bisect</font>
查找<font style="color:rgb(0, 0, 0);">bug</font>
- 9、通过变基保持提交历史整洁
- 10、选择性应用特定提交
- 11、列出所有分支(本地和远程)
- 12、清理未跟踪的文件和目录
- 13、跟踪上游分支
- 14、使用交互式变基合并提交(Squash)
- 15、查看特定提交中的文件
- 16、忽略不必要的文件—提交后编辑
<font style="color:rgb(0, 0, 0);">.gitignore</font>
文件">16、忽略不必要的文件—提交后编辑<font style="color:rgb(0, 0, 0);">.gitignore</font>
文件 - 17、撤销已推送的提交
- 18、仅获取元数据
- 19、追踪代码行的来源—查找特定提交
- 20、将文件重置为上一个提交状态
- 21、重置到指定提交
- 22、为暂存的更改添加消息
- 23、创建标签以标记特定提交
- 24、查看引用日志以跟踪所有操作">24、查看引用日志以跟踪所有操作
- 25、快速解决合并冲突">25、快速解决合并冲突
- 26、快速切换分支
- 27、清理无用的分支">27、清理无用的分支
<font style="color:rgb(145, 109, 213);">Git</font>
是开发者必备的版本控制工具。虽然图形用户界面(<font style="color:rgb(145, 109, 213);">GUI</font>
)工具可以简化一些任务,但掌握 <font style="color:rgb(145, 109, 213);">Git</font>
命令行能提供更深的控制、灵活性和速度。以下是每位开发者应知的24个 <font style="color:rgb(145, 109, 213);">Git</font>
命令行技巧,以优化他们的工作流程。
1、设置全局配置
确保提交使用正确的身份进行标记。
💡 提示:使用
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
<font style="color:rgb(145, 109, 213);">--local</font>
而不是 <font style="color:rgb(145, 109, 213);">--global</font>
来设置项目特定的配置。
2、撤销最后一次提交(保留更改)
如果在最后一次提交中犯了错误,可以撤销它。可以用以下命令撤销最后一次提交,但保留文件的更改:
此时更改会回到暂存区,可以重新提交正确的信息:
git reset --soft HEAD~1
小贴士:
git commit -m "正确的提交信息"
<font style="color:rgb(155, 110, 35);">--soft</font>
参数保留更改,<font style="color:rgb(155, 110, 35);">--hard</font>
则会直接丢弃更改,使用时需谨慎。
3、修改最后一次提交
忘记包含某个更改或想更新提交信息吗?
git add .
git commit --amend -m "更新的提交信息"
这会更新之前的提交,而不创建新的提交。
4、暂存未提交的更改
需要在不提交的情况下快速切换分支吗?
git stash
💡 稍后可以使用以下命令恢复暂存的更改:
git stash pop
小贴士: 使用 git stash list
查看所有暂存的更改,方便管理。
5、高效查看提交历史—以图形方式查看提交历史
可视化提交历史使理解项目状态变得更加容易。
git log --graph --oneline --all
git log -p <filename>
例如:
$ git log --graph
* d4e5f6a (HEAD -> main) 合并分支 feature/login
|\
| * a1b2c3d (feature/login) 修复登录页面的 bug
|/
* f7g8h9b 初始化项目
*
表示一个提交。- 竖线
|
表示分支上的提交是线性发展的,斜线/
和反斜线\
表示分支的分叉和合并
小贴士: 使用 --oneline
和 --graph
参数可以快速了解项目的整体历史。
假设我们有一个 Git 仓库,提交历史如下,注意越上面提交越新:
* 3e1c2f3 Merge branch 'feature'
|\
| * 1a2b3c4 Add feature B
| * 9d8e7f6 Add feature A
* | 4f5g6h7 Fix bug in main branch
|/
* 2c3d4e5 Initial commit
从 2c3d4e5
开始,主分支继续向上,创建了提交 4f5g6h7
。同时,feature 分支从 2c3d4e5
分叉,创建了提交 9d8e7f6
和 1a2b3c4
。提交 3e1c2f3
是一个合并提交,它将 feature 分支合并回了主分支。
简洁模式使用 git log --oneline
:
$ git log --oneline
a1b2c3d 修复登录页面的 bug
d4e5f6a 添加用户注册功能
f7g8h9b 初始化项目
3e1c2f3 Merge branch 'feature'
1a2b3c4 Add feature B
9d8e7f6 Add feature A
4f5g6h7 Fix bug in main branch
2c3d4e5 Initial commit
使用 git log --graph
:
* commit 3e1c2f3 (HEAD -> main) Merge branch 'feature'
|\
| * commit 1a2b3c4 (feature) Add feature B
| * commit 9d8e7f6 Add feature A
* | commit 4f5g6h7 Fix bug in main branch
|/
* commit 2c3d4e5 Initial commit
其实还有一个命令更好用:git log --oneline --graph
,它在 git log --graph
的基础上,进一步简化输出,每个提交只显示一行(简短哈希值 + 提交说明):
* 3e1c2f3 Merge branch 'feature'
|\
| * 1a2b3c4 Add feature B
| * 9d8e7f6 Add feature A
* | 4f5g6h7 Fix bug in main branch
|/
* 2c3d4e5 Initial commit
6、更改提交作者
更改最后一次提交的作者。
git commit --amend --author="New Author <newauthor@example.com>"
7、检查暂存更改的差异
使用 <font style="color:rgb(145, 109, 213);">git diff</font>
比较不同阶段的文件差异。
git diff --staged
这将显示已暂存但尚未提交的更改。
8、使用 <font style="color:rgb(0, 0, 0);">bisect</font>
查找 <font style="color:rgb(0, 0, 0);">bug</font>
使用 <font style="color:rgb(145, 109, 213);">git bisect</font>
找到引入 <font style="color:rgb(145, 109, 213);">bug</font>
的提交。
git bisect start
git bisect bad # 当前提交是坏的
git bisect good <commit-hash> # 一个已知的好的提交
<font style="color:rgb(145, 109, 213);">Git</font>
将遍历提交历史以识别有问题的提交。
9、通过变基保持提交历史整洁
变基重写你的提交历史,以提高清晰度。
git rebase -i HEAD~3
这让你可以编辑、合并或重新排序最近的三个提交。
10、选择性应用特定提交
想从另一个分支引入特定的提交吗?
git cherry-pick <commit-hash>
11、列出所有分支(本地和远程)
查看可用的分支。
git branch -a
12、清理未跟踪的文件和目录
快速删除未被 <font style="color:rgb(145, 109, 213);">Git</font>
跟踪的不必要文件。
💡 使用
git clean -fd
<font style="color:rgb(145, 109, 213);">-n</font>
进行模拟运行,以预览将被删除的内容。
13、跟踪上游分支
让本地分支与远程分支保持同步。
git branch --set-upstream-to=origin/main
14、使用交互式变基合并提交(Squash)
将多个提交合并为一个。当分支上的提交过多且杂乱时,可以通过交互式 rebase 合并提交:
git rebase -i HEAD~n # 将 'n' 替换为提交的数量
运行上面命令后,Git 会打开一个交互式编辑器(通常是 Vim 或你配置的默认编辑器),显示最近 3 次提交的列表,类似这样:
pick abc123 First commit message
pick def456 Second commit message
pick ghi789 Third commit message
如果想把第二次提交和第三次提交合并到第一次提交中,并修改最终的提交信息,可以这样将前面 pick 改为 squash:
pick abc123 First commit message
squash def456 Second commit message
squash ghi789 Third commit message
按 Esc,输入 :wq
,然后回车,保存并退出。Git 会提示你编辑合并后的提交信息,完成后提交历史就会被整理成一条新的提交。
- squash: 合并提交,并保留所有提交信息。
- fixup: 合并提交,但只保留第一个提交的信息。
15、查看特定提交中的文件
检查特定提交中某个文件的状态。
git show <commit-hash>:path/to/file
16、忽略不必要的文件—提交后编辑 <font style="color:rgb(0, 0, 0);">.gitignore</font>
文件
如果忘记忽略某些文件,可以更新 <font style="color:rgb(145, 109, 213);">.gitignore</font>
文件。
echo "node_modules/" >> .gitignore
git rm -r --cached node_modules/
git commit -m "更新 .gitignore"
小贴士: 在项目初始化时就配置好 .gitignore
,避免不必要的文件被提交。
17、撤销已推送的提交
撤销特定提交的更改而不更改历史记录。
git revert <commit-hash>
18、仅获取元数据
想避免拉取整个仓库吗?
git fetch --dry-run
这让你可以查看将要拉取的内容,而无需实际下载数据。
19、追踪代码行的来源—查找特定提交
找出文件中特定行的作者。查看文件每行的最后修改记录:
git blame <filename>
git blame path/to/file
搜索包含特定关键词的提交:
git log -S "关键词"
小贴士: git blame
是排查问题的利器,能快速定位代码的修改者和时间。
20、将文件重置为上一个提交状态
丢弃特定文件的本地更改。
git checkout -- path/to/file
21、重置到指定提交
使用 <font style="color:rgb(145, 109, 213);">git reset --hard [commit-hash]</font>
可以将当前分支重置到指定的提交状态,丢弃所有后续的更改。注意,这将永久删除未保存的更改。
git reset --hard [commit-hash]
22、为暂存的更改添加消息
使用 <font style="color:rgb(145, 109, 213);">git stash -m 'message'</font>
可以为暂存的更改添加描述性消息,方便后续查看和管理。
git stash -m '库更新'
23、创建标签以标记特定提交
git tag
是 Git 中用来给某个提交(commit)打标签的命令,通常用于标记重要的发布版本。
标签分为两种:轻量标签(lightweight tag
) 和 附注标签(annotated tag
)。
- 创建轻量标签:
git tag v1.0
- 推送标签到远程仓库:
git push origin v1.0
小贴士: 使用语义化版本号(如 v1.0.0)可以更清晰地管理项目版本。
如果想给某个特定的提交打标签,可以指定提交的哈希值:
git tag v1.0.0 <commit-hash>
创建附注标签:
git tag -a v1.0.0 -m "Release version 1.0.0"
- -a 表示创建附注标签。
- -m 用来添加标签的说明信息。
同样,也可以指定某个提交并推送:
git tag -a v1.0.0 <commit-hash> -m "Release version 1.0.0"
git push origin v1.0.0
如果想一次性推送所有标签:
git push origin --tags
最后顺便说说删除标签,它需要先删除本地标签,再推送删除操作:
git tag -d v1.0.0
git push origin --delete v1.0.0
24、查看引用日志以跟踪所有操作
使用 <font style="color:rgb(145, 109, 213);">git reflog</font>
可以查看所有引用的日志记录,帮助追踪历史操作。
git reflog
这将显示所有的 <font style="color:rgb(145, 109, 213);">HEAD</font>
移动记录,包括已经丢弃的提交,便于恢复到之前的状态。
这24个 <font style="color:rgb(145, 109, 213);">Git</font>
命令行技巧可以使你的开发过程更加顺畅,无论是独立工作还是团队合作。虽然 <font style="color:rgb(145, 109, 213);">GUI</font>
工具提供了便利,但掌握 <font style="color:rgb(145, 109, 213);">Git</font>
命令行能让你对工作流程拥有更大的控制力。
25、快速解决合并冲突
合并冲突是 Git 使用中的常见问题。Git 会在冲突文件中标记冲突内容:
<<<<<<< HEAD
你的更改
=======
队友的更改
>>>>>>> feature-branch
手动编辑文件后,运行以下命令完成合并:
git add <冲突文件>
git commit -m "解决合并冲突"
建议:使用 IDE 内置的冲突解决工具(如 VS Code)更直观,能大幅提升效率。
26、快速切换分支
当需要频繁切换分支时,可以使用以下命令返回上一个分支:
git checkout -
这个命令会让你快速回到之前的分支,尤其在多分支开发时非常实用。
27、清理无用的分支
随着项目的推进,可能会产生许多不再需要的分支。清理这些分支可以让仓库更整洁:
删除本地分支:
git branch -d branch-name
git branch -d
:安全删除,当前分支的更改没有被合并到其他分支再删除,更常用。git branch -D
:强制删除,适合清理无用分支时使用。
删除远程分支:
git push origin --delete branch-name
小贴士: 定期清理无用分支,保持仓库的整洁和可维护性。