<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、设置全局配置

确保提交使用正确的身份进行标记。

  1. git config --global user.name "Your Name"
  2. 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、撤销最后一次提交(保留更改)

如果在最后一次提交中犯了错误,可以撤销它。可以用以下命令撤销最后一次提交,但保留文件的更改:

  1. git reset --soft HEAD~1
此时更改会回到暂存区,可以重新提交正确的信息:
  1. git commit -m "正确的提交信息"
小贴士:<font style="color:rgb(155, 110, 35);">--soft</font> 参数保留更改,<font style="color:rgb(155, 110, 35);">--hard</font> 则会直接丢弃更改,使用时需谨慎。

3、修改最后一次提交

忘记包含某个更改或想更新提交信息吗?

  1. git add .
  2. git commit --amend -m "更新的提交信息"

这会更新之前的提交,而不创建新的提交。

4、暂存未提交的更改

需要在不提交的情况下快速切换分支吗?

  1. git stash

💡 稍后可以使用以下命令恢复暂存的更改:

  1. git stash pop

小贴士: 使用 git stash list 查看所有暂存的更改,方便管理。

5、高效查看提交历史—以图形方式查看提交历史

可视化提交历史使理解项目状态变得更加容易。

  1. git log --graph --oneline --all
  2. git log -p <filename>

例如:

  1. $ git log --graph
  2. * d4e5f6a (HEAD -> main) 合并分支 feature/login
  3. |\
  4. | * a1b2c3d (feature/login) 修复登录页面的 bug
  5. |/
  6. * f7g8h9b 初始化项目
  • *表示一个提交。
  • 竖线 | 表示分支上的提交是线性发展的,斜线/ 和反斜线 \ 表示分支的分叉和合并

小贴士: 使用 --oneline--graph 参数可以快速了解项目的整体历史。

假设我们有一个 Git 仓库,提交历史如下,注意越上面提交越新:

  1. * 3e1c2f3 Merge branch 'feature'
  2. |\
  3. | * 1a2b3c4 Add feature B
  4. | * 9d8e7f6 Add feature A
  5. * | 4f5g6h7 Fix bug in main branch
  6. |/
  7. * 2c3d4e5 Initial commit

2c3d4e5 开始,主分支继续向上,创建了提交 4f5g6h7。同时,feature 分支从 2c3d4e5 分叉,创建了提交 9d8e7f61a2b3c4。提交 3e1c2f3 是一个合并提交,它将 feature 分支合并回了主分支。

简洁模式使用 git log --oneline

  1. $ git log --oneline
  2. a1b2c3d 修复登录页面的 bug
  3. d4e5f6a 添加用户注册功能
  4. f7g8h9b 初始化项目
  5. 3e1c2f3 Merge branch 'feature'
  6. 1a2b3c4 Add feature B
  7. 9d8e7f6 Add feature A
  8. 4f5g6h7 Fix bug in main branch
  9. 2c3d4e5 Initial commit

使用 git log --graph

  1. * commit 3e1c2f3 (HEAD -> main) Merge branch 'feature'
  2. |\
  3. | * commit 1a2b3c4 (feature) Add feature B
  4. | * commit 9d8e7f6 Add feature A
  5. * | commit 4f5g6h7 Fix bug in main branch
  6. |/
  7. * commit 2c3d4e5 Initial commit

其实还有一个命令更好用:git log --oneline --graph,它在 git log --graph 的基础上,进一步简化输出,每个提交只显示一行(简短哈希值 + 提交说明):

  1. * 3e1c2f3 Merge branch 'feature'
  2. |\
  3. | * 1a2b3c4 Add feature B
  4. | * 9d8e7f6 Add feature A
  5. * | 4f5g6h7 Fix bug in main branch
  6. |/
  7. * 2c3d4e5 Initial commit

6、更改提交作者

更改最后一次提交的作者。

  1. git commit --amend --author="New Author <newauthor@example.com>"

7、检查暂存更改的差异

使用 <font style="color:rgb(145, 109, 213);">git diff</font> 比较不同阶段的文件差异。

  1. 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> 的提交。
  1. git bisect start
  2. git bisect bad # 当前提交是坏的
  3. git bisect good <commit-hash> # 一个已知的好的提交

<font style="color:rgb(145, 109, 213);">Git</font> 将遍历提交历史以识别有问题的提交。

9、通过变基保持提交历史整洁

变基重写你的提交历史,以提高清晰度。

  1. git rebase -i HEAD~3

这让你可以编辑、合并或重新排序最近的三个提交。

10、选择性应用特定提交

想从另一个分支引入特定的提交吗?

  1. git cherry-pick <commit-hash>

11、列出所有分支(本地和远程)

查看可用的分支。

  1. git branch -a

12、清理未跟踪的文件和目录

快速删除未被 <font style="color:rgb(145, 109, 213);">Git</font> 跟踪的不必要文件。

  1. git clean -fd
💡 使用 <font style="color:rgb(145, 109, 213);">-n</font> 进行模拟运行,以预览将被删除的内容。

13、跟踪上游分支

让本地分支与远程分支保持同步。

  1. git branch --set-upstream-to=origin/main

14、使用交互式变基合并提交(Squash)

将多个提交合并为一个。当分支上的提交过多且杂乱时,可以通过交互式 rebase 合并提交:

  1. git rebase -i HEAD~n # 将 'n' 替换为提交的数量

运行上面命令后,Git 会打开一个交互式编辑器(通常是 Vim 或你配置的默认编辑器),显示最近 3 次提交的列表,类似这样:

  1. pick abc123 First commit message
  2. pick def456 Second commit message
  3. pick ghi789 Third commit message

如果想把第二次提交和第三次提交合并到第一次提交中,并修改最终的提交信息,可以这样将前面 pick 改为 squash:

  1. pick abc123 First commit message
  2. squash def456 Second commit message
  3. squash ghi789 Third commit message

按 Esc,输入 :wq,然后回车,保存并退出。Git 会提示你编辑合并后的提交信息,完成后提交历史就会被整理成一条新的提交。

  • squash: 合并提交,并保留所有提交信息。
  • fixup: 合并提交,但只保留第一个提交的信息。

15、查看特定提交中的文件

检查特定提交中某个文件的状态。

  1. 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> 文件。

  1. echo "node_modules/" >> .gitignore
  2. git rm -r --cached node_modules/
  3. git commit -m "更新 .gitignore"

小贴士: 在项目初始化时就配置好 .gitignore,避免不必要的文件被提交。

17、撤销已推送的提交

撤销特定提交的更改而不更改历史记录。

  1. git revert <commit-hash>

18、仅获取元数据

想避免拉取整个仓库吗?

  1. git fetch --dry-run

这让你可以查看将要拉取的内容,而无需实际下载数据。

19、追踪代码行的来源—查找特定提交

找出文件中特定行的作者。查看文件每行的最后修改记录:

  1. git blame <filename>
  2. git blame path/to/file

搜索包含特定关键词的提交:

  1. git log -S "关键词"

小贴士: git blame 是排查问题的利器,能快速定位代码的修改者和时间。

20、将文件重置为上一个提交状态

丢弃特定文件的本地更改。

  1. git checkout -- path/to/file

21、重置到指定提交

使用 <font style="color:rgb(145, 109, 213);">git reset --hard [commit-hash]</font> 可以将当前分支重置到指定的提交状态,丢弃所有后续的更改。注意,这将永久删除未保存的更改。

  1. git reset --hard [commit-hash]

22、为暂存的更改添加消息

使用 <font style="color:rgb(145, 109, 213);">git stash -m 'message'</font> 可以为暂存的更改添加描述性消息,方便后续查看和管理。

  1. git stash -m '库更新'

23、创建标签以标记特定提交

git tag 是 Git 中用来给某个提交(commit)打标签的命令,通常用于标记重要的发布版本。

标签分为两种:轻量标签(lightweight tag) 和 附注标签(annotated tag)。

  • 创建轻量标签:
  1. git tag v1.0
  • 推送标签到远程仓库:
  1. git push origin v1.0

小贴士: 使用语义化版本号(如 v1.0.0)可以更清晰地管理项目版本。

如果想给某个特定的提交打标签,可以指定提交的哈希值:

  1. git tag v1.0.0 <commit-hash>

创建附注标签:

  1. git tag -a v1.0.0 -m "Release version 1.0.0"
  • -a 表示创建附注标签。
  • -m 用来添加标签的说明信息。

同样,也可以指定某个提交并推送:

  1. git tag -a v1.0.0 <commit-hash> -m "Release version 1.0.0"
  2. git push origin v1.0.0

如果想一次性推送所有标签:

  1. git push origin --tags

最后顺便说说删除标签,它需要先删除本地标签,再推送删除操作:

  1. git tag -d v1.0.0
  2. git push origin --delete v1.0.0

24、查看引用日志以跟踪所有操作

使用 <font style="color:rgb(145, 109, 213);">git reflog</font> 可以查看所有引用的日志记录,帮助追踪历史操作。

  1. 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 会在冲突文件中标记冲突内容:

  1. <<<<<<< HEAD
  2. 你的更改
  3. =======
  4. 队友的更改
  5. >>>>>>> feature-branch

手动编辑文件后,运行以下命令完成合并:

  1. git add <冲突文件>
  2. git commit -m "解决合并冲突"

建议:使用 IDE 内置的冲突解决工具(如 VS Code)更直观,能大幅提升效率。

26、快速切换分支

当需要频繁切换分支时,可以使用以下命令返回上一个分支:

  1. git checkout -

这个命令会让你快速回到之前的分支,尤其在多分支开发时非常实用。

27、清理无用的分支

随着项目的推进,可能会产生许多不再需要的分支。清理这些分支可以让仓库更整洁:

删除本地分支:

  1. git branch -d branch-name
  • git branch -d:安全删除,当前分支的更改没有被合并到其他分支再删除,更常用。
  • git branch -D:强制删除,适合清理无用分支时使用。

删除远程分支:

  1. git push origin --delete branch-name

小贴士: 定期清理无用分支,保持仓库的整洁和可维护性。