Git 终端操作完全指南:从入门到实战
本文涵盖 Git 最常用的命令、实际效果说明,以及如何在 VSCode 中高效使用 Git。适合初学者和日常开发者参考。
一、初始配置
第一次使用 Git 前,需要设置你的身份信息,这些信息会出现在每次提交记录中。
git config --global user.name "你的名字"
git config --global user.email "your@email.com"
git config --global init.defaultBranch main
效果:所有仓库的提交都会使用这个名字和邮箱。init.defaultBranch main 让新建仓库默认主分支叫 main 而不是旧版的 master。
查看配置:
git config --list
二、仓库初始化与克隆
创建新仓库
mkdir my-project
cd my-project
git init
效果:在当前目录生成 .git 隐藏文件夹,Git 开始追踪这个目录的所有变化。
克隆远程仓库
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git my-folder # 指定本地文件夹名
效果:下载整个仓库到本地,包括所有历史记录、所有分支。自动设置好远程地址 origin。
三、日常操作流程
这是每天都会用到的核心流程:修改 → 暂存 → 提交 → 推送。
1. 查看状态
git status
效果:显示哪些文件被修改了、哪些是新文件、哪些已暂存。颜色提示: - 红色:未追踪或已修改未暂存 - 绿色:已暂存待提交
2. 添加文件到暂存区
git add file.py # 添加单个文件
git add src/ # 添加整个文件夹
git add . # 添加所有变化(常用)
git add -p # 交互式选择要暂存的代码块
效果:将文件的当前状态"快照"放入暂存区(staging area)。git add -p 特别实用——它会逐块询问你是否暂存,适合一个文件里有多处修改但想分开提交的场景。
3. 提交
git commit -m "修复登录页面的样式问题"
git commit -am "修复bug" # 跳过add,直接提交已追踪文件的修改
效果:将暂存区的内容创建为一个永久记录(commit)。每个 commit 有唯一哈希值,可以随时回到这个状态。
好的提交信息习惯: - 第一行简短描述(50字以内) - 空一行 - 详细说明(如果需要) - 用动词开头:"添加"、"修复"、"重构"、"更新"
4. 推送到远程
git push origin main
git push # 如果设置了上游分支,可以省略参数
效果:将本地的提交上传到 GitHub/GitLab 等远程仓库。
四、分支操作
分支是 Git 最强大的功能之一,让你可以在不影响主线的情况下开发新功能。
基本操作
git branch # 查看所有本地分支
git branch -a # 查看所有分支(包括远程)
git branch feature-login # 创建新分支
git checkout feature-login # 切换到该分支
git checkout -b feature-login # 创建并切换(常用)
git switch feature-login # 新版切换命令(Git 2.23+)
git switch -c feature-login # 新版创建并切换
效果:分支就像平行宇宙,每个分支独立发展,互不影响。
合并分支
git checkout main
git merge feature-login
效果:将 feature-login 分支的所有提交合并到 main。如果两个分支修改了同一文件的同一位置,会产生冲突,需要手动解决。
删除分支
git branch -d feature-login # 已合并时删除
git branch -D feature-login # 强制删除
git push origin --delete feature-login # 删除远程分支
分支实战流程
# 开发新功能
git checkout -b feature-search
# ... 写代码 ...
git add .
git commit -m "添加搜索功能"
git push origin feature-search
# 合并到主分支
git checkout main
git pull origin main # 先拉取最新代码
git merge feature-search
git push origin main
# 清理
git branch -d feature-search
五、查看历史
git log # 完整日志
git log --oneline # 简洁版(一行一个提交)
git log --oneline -10 # 最近10条
git log --graph --oneline # 图形化显示分支合并
git log --author="名字" # 按作者筛选
git log --since="2024-01-01" # 按时间筛选
git log -p file.py # 查看某个文件的修改历史
效果:--oneline 最常用,每个提交显示为一行短哈希+信息。--graph 能直观看到分支合并的过程。
查看某次提交改了什么:
git show abc1234 # 查看某次提交的详细差异
git diff # 查看未暂存的修改
git diff --staged # 查看已暂存的修改
git diff main..feature-login # 比较两个分支的差异
六、撤销与回退
这是最容易搞混的部分,分清场景很重要。
丢弃工作区的修改(还没 add)
git restore file.py # 新版命令
git checkout -- file.py # 旧版命令
效果:文件回到上次提交时的状态,所有修改丢失。
取消暂存(已经 add 但还没 commit)
git restore --staged file.py # 新版
git reset HEAD file.py # 旧版
效果:文件从暂存区移回工作区,修改内容保留。
修改最近一次提交
git commit --amend # 修改提交信息或追加遗漏的文件
git commit --amend --no-edit # 只追加文件,不改提交信息
效果:用新的提交替换上一个。适合刚提交完发现忘了一个文件或打错字。
回退到某个历史提交
git reset --soft abc1234 # 回退提交,保留修改在暂存区
git reset --mixed abc1234 # 回退提交,保留修改在工作区(默认)
git reset --hard abc1234 # 回退提交,丢弃所有修改(危险!)
效果:
- --soft:撤销提交但代码改动还在,可以重新提交
- --mixed:撤销提交和暂存,代码改动还在
- --hard:彻底回到那个时间点,所有后续改动丢失
安全回退(推荐)
git revert abc1234 # 创建一个新提交来撤销指定提交
git revert HEAD # 撤销最近一次提交
效果:不动历史,而是生成一个"反向提交"。安全,适合已推送到远程的情况。
七、暂存工作现场
正在开发一半,突然要修个紧急 bug?
git stash # 暂存当前修改
git stash save "搜索功能开发中" # 带备注的暂存
git stash list # 查看所有暂存
git stash pop # 恢复最近一次暂存并删除
git stash apply # 恢复但保留暂存记录
git stash drop stash@{0} # 删除指定暂存
效果:git stash 把工作区的修改临时"藏起来",工作区变干净。切到其他分支修完 bug 后,再 pop 回来继续。
八、远程操作
git remote -v # 查看远程仓库地址
git remote add upstream https://github.com/original/repo.git # 添加上游仓库
git fetch origin # 下载远程更新但不合并
git pull origin main # 下载并合并(= fetch + merge)
git pull --rebase origin main # 下载并变基(保持线性历史)
fetch vs pull:
- fetch:只下载,看看有什么变化,手动决定是否合并
- pull:自动下载并合并,方便但可能产生不必要的合并提交
九、变基(Rebase)
git checkout feature-login
git rebase main # 把 feature 分支"搬到" main 最新提交之后
效果:把当前分支的提交从旧的 base 移到新的 base 上,历史变成一条直线。比 merge 更整洁。
注意:不要对已推送到远程并被其他人使用的分支进行 rebase!
交互式变基(整理提交历史):
git rebase -i HEAD~3 # 整理最近3个提交
弹出编辑器,可以:
- pick:保留
- squash:合并到上一个提交
- reword:修改提交信息
- drop:丢弃
十、标签
git tag # 查看所有标签
git tag v1.0.0 # 创建轻量标签
git tag -a v1.0.0 -m "第一个正式版本" # 创建带注释的标签
git push origin v1.0.0 # 推送标签到远程
git push origin --tags # 推送所有标签
git tag -d v1.0.0 # 删除本地标签
效果:标签是某个提交的"别名",常用于标记版本号(v1.0, v2.0 等)。
十一、VSCode 中使用 Git
VSCode 内置了强大的 Git 支持,大部分操作可以通过图形界面完成。
面板概览
按 Ctrl+Shift+G(Mac: Cmd+Shift+G)打开源代码管理面板。你会看到:
- 源代码管理图标(左侧栏):显示所有修改的文件
- 分支名称(左下角):显示当前分支,点击可切换/创建分支
- 同步更改按钮(左下角):一键拉取/推送
常用操作
查看差异:点击修改的文件,VSCode 会左右分栏显示修改前后的对比。红色是删除,绿色是新增。
暂存:每个文件旁边有个 + 号,点击就是 git add。也可以在文件内某一行右键选择"暂存所选范围"(相当于 git add -p)。
提交:在消息框输入提交信息,按 Ctrl+Enter(Mac: Cmd+Enter)提交。
推送/拉取:点击左下角的同步按钮,或者点击状态栏的 ↑↓ 箭头。
分支操作:点击左下角分支名,弹出菜单可以创建、切换、合并分支。
解决冲突:VSCode 会用特殊标记显示冲突区域,提供四个按钮: - Accept Current Change:保留当前分支的修改 - Accept Incoming Change:保留对方分支的修改 - Accept Both Changes:两者都保留 - Compare Changes:查看完整对比
VSCode 终端中的 Git
VSCode 集成的终端(Ctrl+`)直接使用项目目录,Git 命令无缝运行:
# 在 VSCode 终端中
git status # 变化会实时反映在左侧文件图标上
git log --oneline # 结果可以直接点击跳转
实用扩展推荐
- GitLens:最强 Git 扩展。每一行代码旁边显示谁写的、什么时候写的(blame)。可以可视化分支图、比较任意两个提交。
- Git Graph:图形化查看分支和合并历史。
- Git History:查看文件的修改历史,比较任意版本。
GitLens 核心功能
安装后,鼠标悬停在任意代码行上,会显示: - 作者、提交时间、提交信息 - 点击可以查看完整的提交详情 - 状态栏显示当前行最后一次修改的提交
快捷操作:
- Ctrl+Shift+P → "GitLens: Show File History" → 文件修改时间线
- Ctrl+Shift+P → "GitLens: Show Commit Search" → 搜索提交
- 右键文件 → "Open with GitLens" → 可视化分支图
十二、实用技巧
.gitignore 文件
在项目根目录创建 .gitignore,告诉 Git 忽略哪些文件:
# 忽略编译产物
*.pyc
__pycache__/
node_modules/
dist/
# 忽略 IDE 配置
.vscode/
.idea/
# 忽略敏感信息
.env
*.key
# 忽略系统文件
.DS_Store
Thumbs.db
别名配置
给常用命令设置简写:
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
之后 git lg 就能看到完整的分支图。
查找谁改了某行代码
git blame file.py # 显示每一行的最后修改者和提交
git blame -L 10,20 file.py # 只看第10-20行
在 VSCode 中安装 GitLens 后,这个功能自动显示在每行旁边。
搜索提交历史中的内容
git log -S "function_name" # 搜索添加/删除了这个字符串的提交
git log -G "regex_pattern" # 用正则搜索
git log --all --grep="修复" # 搜索提交信息中包含关键词的提交
清理未追踪文件
git clean -n # 预览会删除什么(不实际删除)
git clean -f # 删除未追踪的文件
git clean -fd # 删除未追踪的文件和文件夹
总结
Git 的核心就是三个区域的协作:工作区 → 暂存区 → 仓库。日常 80% 的时间只需要:
git add .— 暂存修改git commit -m "说明"— 提交git push— 推送
遇到问题时,git status 永远是你最好的朋友——它会告诉你当前状态和下一步建议。配合 VSCode 的图形化界面和 GitLens 扩展,Git 操作会变得非常直观。
希望这篇指南能帮你更自信地使用 Git!