Git 系统学习总结:从零到日常开发完全指南

6 阅读8分钟

一、核心原理

1.1 三个区域

工作目录 (Working Directory) [你随便改,还没决定要保存]

  │ git add

  ▼ 暂存区 (Staging Area) [你想保存哪些文件?可以只选一部分]

  │ git commit

  ▼ 本地仓库 (Local Repository) [真正保存版本,可以随时回去]

  │ git push

  ▼ 远程仓库 (Remote Repository)

1.2 文件状态

状态含义git status 显示
Untracked新文件,Git 从未见过红色 Untracked files
Modified已追踪的文件被修改了红色 Changes not staged
Staged已 add,等待提交绿色 Changes to be committed
Committed已提交,版本已保存nothing to commit

二、配置命令

2.1 用户身份配置

命令说明
git config --global user.name "用户名"设置全局用户名
git config --global user.email "邮箱"设置全局邮箱
git config --list查看所有配置
git config --global --unset <key>删除配置

注意:这只是“签名”,告诉别人代码是你写的,不验证身份。真正的鉴权用 SSH 或 Token。

2.2 配置层级

优先级:local > global > system

层级命令文件位置作用范围
localgit config --local.git/config仅当前仓库
globalgit config --global~/.gitconfig当前用户所有仓库
systemgit config --systemGit 安装目录整台电脑

实际使用:90% 的情况用 --global,特殊项目用 --local 覆盖。

2.3 SSH 鉴权配置

命令说明
ssh-keygen -t ed25519 -C "邮箱"生成密钥对
cat ~/.ssh/id_ed25519.pub查看公钥,复制后添加到 GitHub
ssh -T git@github.com测试连接

~/. ssh /config 配置示例

配置项
Hostgithub.com
HostNamegithub.com
Usergit
IdentityFile~/.ssh/id_ed25519

2.4 .gitignore

命令说明
echo ".env" >> .gitignore忽略单个文件
echo "*.log" >> .gitignore忽略所有 .log 文件
echo "node_modules/" >> .gitignore忽略整个目录
git rm --cached <file>停止追踪(保留本地)
git rm --cached -r <dir>停止追踪整个目录

常见问题:.gitignore 对已追踪的文件无效

步骤命令
1git rm --cached <file>
2git rm --cached -r <dir>
3echo "<file>" >> .gitignore

验证 .gitignore 是否生效

命令说明
git status被忽略的文件不会出现
git check-ignore -v <file>查看是哪个规则忽略了该文件

三、基础操作

3.1 仓库初始化与克隆

命令说明
git init在当前目录创建 Git 仓库
git clone <url>克隆远程仓库到本地
git clone <url> <dir>克隆到指定目录

git clone 会自动设置 origin 远程地址,并切换到默认分支。

3.2 查看状态

命令说明
git status查看文件状态(最常用)
git log --oneline -5查看最近5条提交
git log --oneline --graph --all图形化查看所有分支
git ls-files查看被追踪的文件列表

3.3 查看差异

命令说明
git diff工作目录 vs 暂存区
git diff --staged暂存区 vs 上次提交
git diff HEAD工作目录 vs 上次提交
git diff --name-only只显示文件名
git diff --name-status显示文件名+状态(A/M/D)

注意git diff 只显示被 Git 追踪的文件的修改,新文件(Untracked)需要用 git statuscat 查看。


四、提交流程

4.1 添加与提交

命令说明
git add <file>添加指定文件
git add .添加当前目录所有修改(最常用)
git add -p交互式添加
git commit -m "message"提交
git commit -am "message"跳过 add,提交已追踪文件的修改
git commit --amend -m "new message"修改上一次提交信息

注意-a 参数不会添加 Untracked 文件,新文件必须先 git add

4.2 推送与拉取

命令说明
git push推送到关联的远程分支
git push -u origin main第一次推送并建立关联
git pull拉取并合并(= fetch + merge)
git fetch只拉取,不合并

-u 参数的作用:在 .git/config 中记录关联关系,之后可直接用 git push

fetch vs pull

命令联网修改工作目录适用场景
git fetch先看看远程有什么更新
git pull直接同步最新代码

五、分支管理

5.1 分支操作

命令说明
git branch查看本地分支
git branch -r查看远程分支
git branch -vv查看分支关联信息
git branch <name>创建分支
git switch <name>切换分支(推荐)
git switch -c <name>创建并切换(推荐)
git branch -d <name>删除分支
git branch -D <name>强制删除

switch vs checkout

操作旧命令新命令(推荐)
切换分支git checkout maingit switch main
创建并切换git checkout -b newgit switch -c new
恢复文件git checkout -- filegit restore file

5.2 合并与变基

命令说明
git merge <branch>合并分支
git merge --abort放弃合并
git rebase <branch>变基
git rebase -i HEAD~n交互式变基
git rebase --continue继续变基
git rebase --abort放弃变基
git cherry-pick <commit-id>挑选提交到当前分支

merge vs rebase

场景用 merge用 rebase
公共分支(main)✅ 推荐❌ 不要用
个人分支(feature)可以✅ 推荐
已推送的分支✅ 用❌ 不要用

5.3 远程跟踪分支

概念说明
origin/main本地存储的远程跟踪分支
git pullgit fetch + git merge origin/main

origin/main 不联网也能操作,因为它是本地存储的。


六、撤销与恢复

6.1 工作目录与暂存区

状态命令效果
刚修改,没 addgit restore .恢复到上次 commit
已 add,没 commitgit restore --staged .撤出暂存区,保留修改
已 add,没 commitgit reset --hard HEAD彻底放弃修改

注意git restore 只恢复被追踪的文件,不影响 Untracked 文件。

6.2 提交撤销

命令效果适用场景
git reset --soft HEAD~1撤销 commit,保留暂存区提交信息写错了
git reset --mixed HEAD~1撤销 commit+add,保留工作目录想重新 add
git reset --hard HEAD~1全部撤销,丢弃修改完全不想要了(危险)
git revert HEAD用新提交撤销已推送的提交

HEAD~1 的含义

写法含义
HEAD当前提交
HEAD~1上一个提交
HEAD~2上两个提交

6.3 临时保存(git stash)

命令说明
git stash临时保存
git stash list查看保存列表
git stash pop恢复并删除记录
git stash apply恢复并保留记录
git stash drop删除记录
git stash -u包含 Untracked 文件

使用场景:正在改代码,突然要切分支修 bug,又不想提交。

6.4 找回丢失的提交(git reflog)

命令说明
git reflog查看 HEAD 移动历史
git checkout <commit-id>恢复到那个提交
git branch <name> <commit-id>创建分支指向它

git reflog 是本地操作,不能推送到远程,但关键时刻能救命。


七、远程仓库

7.1 远程仓库管理

命令说明
git remote -v查看远程仓库地址
git remote add origin <url>添加远程仓库
git remote set-url origin <new-url>修改远程地址
git remote show origin查看远程详细信息
git remote rm origin删除远程关联

7.2 提交范围

命令说明
git fetch先更新远程分支信息
git log HEAD..origin/main --oneline远程有但本地没有(待 pull)
git log origin/main..HEAD --oneline本地有但远程没有(待 push)
git diff HEAD..origin/main查看远程比本地多了什么

八、标签

命令说明
git tag查看所有标签
git tag v1.0.0轻量标签
git tag -a v1.0.0 -m "message"附注标签(推荐)
git tag -a v0.9.0 <commit-id> -m "b"给历史提交打标签
git push origin v1.0.0推送单个标签
git push --tags推送所有标签
git tag -d v1.0.0删除本地标签
git push origin --delete v1.0.0删除远程标签

九、冲突解决

9.1 冲突标记示例

标记内容
<<<<<<< HEAD你的修改开始
return price * 0.8你的代码
=======分隔线
return price * 0.9同事的代码
>>>>>>> origin/main同事的修改结束

9.2 解决流程

步骤命令
1git pull
2git status
3手动编辑文件,删除冲突标记
4git add <file>
5git commit -m "merge: 解决冲突"
6git push
放弃合并git merge --abort

9.3 减少冲突的最佳实践

实践说明
频繁 pull每天开始工作先 git pull
小步提交每个提交改得少,冲突概率低
分工明确不要多人同时改同一个文件
功能分支每个功能独立分支
先 rebase 再 mergegit rebase main 提前解决冲突

十、调试命令

10.1 git blame

命令说明
git blame <file>查看每行代码的作者
git blame -L 10,20 <file>只看第10-20行
git blame --author="张三" <file>只看某个作者

10.2 git bisect

命令说明
git bisect start开始二分查找
git bisect bad标记当前为坏
git bisect good <commit-id>标记好版本
git bisect reset退出

十一、常用别名

命令说明
git config --global alias.co checkout别名 co
git config --global alias.br branch别名 br
git config --global alias.st status别名 st
git config --global alias.lg "log --oneline --graph --all"图形化日志
git config --global core.quotepath false显示中文文件名

十二、常见问题速查表

问题解决方案
提交信息写错了git commit --amend -m "新信息"
add 多了文件git restore --staged <file>
工作目录改乱了git restore .(未 add)或 git reset --hard HEAD(已 add)
commit 错了想重来git reset --soft HEAD~1
已经 push 错了git revert HEADgit push
切分支时不让切git stash
合并时想放弃git merge --abort
找回被 reset 的提交git refloggit checkout <id>

十三、核心流程图

日常开发流程

步骤命令
1git pull
2修改代码
3git add .
4git commit -m "..."
5git push

撤销流程

状态命令
未 addgit restore .
已 addgit restore --staged .git restore .
已 commitgit reset --soft/mixed/hard HEAD~1
已 pushgit revert HEADgit push

分支流程

步骤命令
1git switch -c feature
2开发
3git add .
4git commit -m "..."
5git switch main
6git merge feature

总结

场景核心命令
配置git config
提交git add + git commit + git push
拉取git pull / git fetch + git merge
分支git branch + git switch + git merge
撤销git restore + git reset + git revert
查看git status + git log + git diff
调试git blame + git reflog
临时保存git stash

记住:Git 是工具,多练习才能真正掌握。建议在实际项目中反复使用这些命令。