目录
Git 是一个非常重要的工具,它提供了强大的命令行,可以帮助开发者管理代码的版本,但尴尬的是,有时候并不能清晰熟练地记住所有的命令,于是,在本文中,我将介绍一些常用的 Git 命令,并展示如何通过 GitLens 插件在 VSCode 中实现这些 Git 操作,提升开发效率。
一、常用的 Git 命令及其作用
-
git log 查看版本历史
1. 基本的 git log
命令
git log
执行 git log
后,会显示 Git 仓库的提交历史,每个提交包含以下信息:
- 提交的唯一标识符(提交哈希值)
- 提交作者
- 提交日期
- 提交消息(描述改动的简短说明)
- 可能会显示父提交(如果是合并提交)
输出格式通常如下所示:
commit e1a2b9f23a7d4f9f5d8b5ff4b1a5f6c9bb8d8b7f
Author: John Doe <john.doe@example.com>
Date: Mon Sep 20 18:30:00 2021 -0700
提交1
commit d4c3f2a56d7c8d3d08b71b3b8c2a56a8a0c8b9f
Author: John Doe <john.doe@example.com>
Date: Mon Sep 19 14:22:11 2021 -0700
提交2
2.git log
可选值及参数
--oneline:显示每个提交的简短版本(哈希值和提交消息),以单行方式呈现提交历史。
-
--graph:以图形化方式显示提交历史,展示分支和合并的结构。
-
--all:显示所有分支的提交历史,而不仅仅是当前分支。
-
--author=<name>:显示某个特定作者的提交记录。
-
--since=<date> 和 --until=<date>:限制显示提交的时间范围,例如 --since="2021-01-01" 显示从 2021 年 1 月 1 日以来的提交。
-
--patch:显示每个提交所做的具体改动(文件差异)。
-
--stat:显示每次提交所影响的文件以及修改的行数统计。
-
--grep=<pattern>:通过提交消息匹配正则表达式,筛选出符合条件的提交。
-
-n <number> 或 --max-count=<number>:限制显示的提交数量,例如 -n 5 只显示最新的 5 次提交。
-
--reverse:按照提交时间的逆序显示提交历史,从最旧的提交开始。
这里只详细介绍一下我认为最常用的 --oneline
--oneline 选项使 git log 的输出更加简洁,每个提交只显示提交哈希值(前 7 个字符)和提交消息。
e1a2b9f 提交1
d4c3f2a 提交2
a8c2e1d 提交3
主要输出:
-
提交哈希(Commit Hash):每个提交对应一个唯一的哈希值,
--oneline
会显示该哈希值的前 7 个字符。 -
提交消息(Commit Message):每个提交时附带的简短说明或消息。
使用场景:
-
简洁查看提交历史:当你只关心提交的摘要信息而不是详细内容时,
git log --oneline
会比普通的git log
输出更加紧凑和易于阅读。 -
查看提交 ID:当你需要获取某个特定提交的哈希值时,
--oneline
格式的输出可以帮助你快速定位。
配合其他选项使用:你可以将 --oneline
与其他选项一起使用,比如 --graph
来查看分支和合并历史,或与 --all
配合查看所有分支的提交。
-
git revert
“回滚”提交
作用:撤销某个已提交的改动,并生成一个新的提交来反向修改该提交。
常见场景:回滚一个错误的提交,但不改变 Git 提交历史。
git revert <commit-id>
比如要回滚提交 ID 为 abc1234 的提交,就可以使用以下命令
(这里的ID就可以使用上文提到的git log --oneline查到):
git revert abc1234
-
git reset
撤销提交
作用:撤销提交,可以选择撤销提交、暂存区的内容,或者完全重置工作区。
常见场景:在本地开发时需要撤销最近的提交。
git reset --soft <commit-id>
:仅重置提交。git reset --mixed <commit-id>
:重置提交和暂存区。
补充
如果错误提交或合并了分支,想将代码回到某条提交时的状态,可以按如下操作
1. 重置到指定提交
比如,想将代码回退到2239eb1
提交时的状态,执行以下命令:
git reset --hard 2239eb1
这会将当前分支的 HEAD 和工作区的内容重置为该提交的状态。
2.如果已推送到远程
如果你已经将提交推送到远程仓库,执行重置操作后,工作区会出现如下内容:
这时可以执行如下命令:
同步远程分支,执行强制推送
git push origin <branch-name> --force
-
git branch
创建新分支
作用:创建新分支,用于独立的功能开发或 bug 修复。
git branch <branch-name>
示例: 创建一个名为 feature-login 的新分支:
git branch feature-login
-
git merge
合并分支
作用:将其他分支的修改合并到当前分支,通常在开发完成后,使用
merge
将功能分支合并到主分支。
git merge <branch-name>
示例: 将 feature-login 分支合并到当前分支:
git merge feature-login
-
git cherry-pick
提取特定提交
作用:将其他分支中的某个特定提交,挑选并应用到当前分支。
git cherry-pick <commit-id>
示例:将 feature-1 分支的提交 abc1234 应用到当前分支:
git cherry-pick abc1234
-
git status
查看当前状态
作用:查看当前分支的状态,检查未提交的更改以及当前分支的最新提交信息。
二、通过 GitLens 插件实现这些 Git 操作
GitLens 是一个功能强大的 VSCode 插件,它扩展了 VSCode 内置的 Git 功能。GitLens 提供了丰富的界面和功能,帮助开发者更好地管理版本控制任务,而无需频繁切换到命令行。接下来,我将逐一介绍如何使用 GitLens 插件实现上述 Git 操作。可选则安装下面这个插件:
-
git revert
“回滚”提交
1.选择 Commits
2.找到想要回滚的提交记录,右键选择 “Revert Commit”
3.选择想要的操作点击即可
区别:
Revert --no-edit:自动回滚并使用默认的回滚消息,操作更快。
Revert & Edit --edit:回滚后允许编辑提交消息,适合需要修改回滚消息的场景。
4.最终效果: GitLens 会生成一个新的提交,撤销选定提交的修改,并将该提交添加到当前分支。
-
git reset
撤销提交
1.同样找到 Commits,找到想要回滚的提交记录,右键选择 “Checkout Commit”
2.点击后会出现如图对话框
区别:
Checkout to Commit:进入 detached HEAD 状态,仅查看历史提交,适用于临时查看某个提交的状态。
Create & Switch to New Branch from Commit:基于历史提交创建并切换到新分支,适合需要在旧版本上继续开发的场景。
Create Worktree for New Branch from Commit:为新分支创建一个独立的工作树,不影响当前工作区,适合需要同时处理多个开发任务的场景。
-
git branch
创建新分支
-
git merge
合并分支
1.选择 Branches
2.选择想要合并到当前分支的分支,右键选择 “Merge Branch into Current Branch”
*此操作会将选中分支的修改合并到当前所在分支,如果没有冲突,GitLens 会自动完成合并;如果有冲突,你需要手动解决冲突并提交合并结果。
-
cherry-pick
提取特定提交
1.在 Branches 或 Remotes 里操作都可以
2.找到你想要 cherry-pick 的提交,右键点击该提交,选择 “Cherry Pick Commit”,GitLens 会将该提交应用到当前分支。
-
apply changes
将单个文件的修改提交到工作区
将当前分支的某个文件或改动应用到工作区(也就是当前文件的内容会被修改成其他分支中对应文件的内容)
执行
Apply Changes
的作用
合并特定文件的改动:
如果选择了某个分支的文件,执行Apply Changes
后,会将该分支中对应文件的改动应用到你当前工作分支的同一文件中。仅影响选定的文件,而不是整个分支。并且这只是本地操作,不会立即影响远程仓库。不影响其他文件:
该操作不会对其他文件或当前分支的整体状态产生影响,只针对单独选中的文件。可能触发冲突:
如果当前分支的文件与目标分支的文件内容有较大差异,执行后可能会触发冲突,需要手动解决。
希望本文能够帮助你实现更高效的版本控制管理!