一、Git 基础配置(首次使用必做)
1.1 安装 Git
- Windows:官网下载安装包,安装时默认选项即可。
- Mac :
brew install git - Linux(Ubuntu) :
sudo apt install git
1.2 配置用户名和邮箱(全局)
bash
# 设置用户名
git config --global user.name "你的名字"
# 设置邮箱
git config --global user.email "你的邮箱@example.com"
# 查看所有配置
git config --global --list
- 不加
--global仅对当前仓库生效。
1.3 配置别名(可选,提高效率)
bash
# 例如:git st 代替 git status
git config --global alias.st status
# 例如:git ci 代替 git commit
git config --global alias.ci commit
二、仓库创建与克隆
2.1 初始化本地仓库
bash
# 在当前目录创建 .git 文件夹
git init
# 在指定目录初始化
git init my-project
2.2 克隆远程仓库
bash
# 克隆整个仓库
git clone https://github.com/xxx/xxx-repo.git
# 克隆指定分支
git clone -b dev https://github.com/xxx/xxx-repo.git
# 浅克隆(只拉取最近1次提交,速度快)
git clone --depth 1 https://github.com/xxx/xxx-repo.git
三、本地日常操作(核心常用)
3.1 查看状态
bash
# 查看工作区、暂存区状态
git status
# 简洁模式
git status -s
3.2 添加到暂存区
bash
# 添加单个文件
git add README.md
# 添加所有文件
git add .
# 添加指定目录
git add src/
# 交互式添加(选择部分修改)
git add -p
3.3 提交到本地仓库
bash
# 提交并写备注(常用)
git commit -m "feat: 新增用户登录功能"
# 提交时修改上一次提交(合并到上一个提交)
git commit --amend -m "fix: 修复登录bug"
# 跳过代码检查钩子(不推荐)
git commit --no-verify -m "临时提交"
3.4 撤销操作
(1)撤销工作区修改(未暂存)
bash
# 撤销单个文件
git restore README.md
# 撤销所有文件
git restore .
(2)撤销暂存区(已 add,未 commit)
bash
# 撤销单个文件暂存
git restore --staged README.md
# 等价旧命令:git reset HEAD README.md
(3)撤销提交(已 commit,未 push)
bash
# 软撤销:保留修改,回到暂存区
git reset --soft HEAD~1
# 硬撤销:彻底删除提交,修改也删除(谨慎)
git reset --hard HEAD~1
3.5 查看提交历史
bash
# 完整历史
git log
# 单行简洁显示
git log --oneline
# 图形化显示分支
git log --graph --oneline
# 显示具体修改内容
git log -p
# 查看某个文件的历史
git log README.md
3.6 比较差异
bash
# 工作区 vs 暂存区
git diff
# 暂存区 vs 最新提交
git diff --staged
# 工作区 vs 最新提交
git diff HEAD
# 两次提交之间差异
git diff a1b2c3 d4e5f6
3.7 代码回退 / 重置
你只需要记住 3 个核心场景,覆盖 99% 需求:
一、你当前处于哪种情况?
1. 只改了文件,还没 git add
想丢弃工作区修改,回到上次提交的干净状态。
bash
# 丢弃单个文件
git restore 文件名
# 丢弃所有文件修改(谨慎!)
git restore .
✅ 作用:代码直接回到上一次提交,本地修改全部消失。
2. 已经 git add,但还没 git commit
想把暂存区的文件撤回来,回到未 add 状态。
bash
# 撤销单个文件
git restore --staged 文件名
# 撤销所有文件
git restore --staged .
✅ 作用:文件修改还在,只是从暂存区拿回来。
3. 已经 git commit,但还没 git push(最常用!)
这是真正的版本回退,分三种安全等级:
二、已 commit 未 push:三种回退方式(必看)
① 软回退(最安全,推荐)
保留你的代码,只是撤销提交
bash
git reset --soft HEAD~1
✅ 效果:
- 回到上一个版本
- 你写的代码全部保留
- 回到
git add之后的状态
适合:想重新修改、重新提交。
② 混合回退(默认方式)
保留代码,回到未 add 状态
bash
git reset HEAD~1
# 等价 git reset --mixed HEAD~1
✅ 效果:
- 代码保留
- 回到未 add、未 commit状态
③ 硬回退(危险!会删代码)
彻底回到过去版本,代码直接丢失
bash
git reset --hard HEAD~1
⚠️ 警告:
- 当前所有修改全部消失
- 再也找不回来(除非用 reflog)
适合:我就是要彻底扔掉这次提交。
三、回退到「指定历史版本」(不是只回退 1 次)
- 先看历史版本号
bash
git log --oneline
会出现:
a1b2c3d 这次提交我想回退
d4e5f6g 上一个正常版本
- 回退到
d4e5f6g
bash
git reset --hard d4e5f6g
四、已经 push 到远程了,怎么回退?
分两种:
① 安全方式(推荐)
bash
git revert 要撤销的commitID
✅ 不会破坏别人代码,只是新增一个"撤销提交"
② 强制覆盖(危险!团队慎用)
bash
git reset --hard 版本号
git push -f
⚠️ 会覆盖远程仓库,团队项目千万别乱用!
五、最常用的 5 条命令(背会就够)
bash
# 1. 丢弃工作区修改(未add)
git restore .
# 2. 撤销add(已add未commit)
git restore --staged .
# 3. 撤销上一次commit,保留代码(最常用)
git reset --soft HEAD~1
# 4. 回退到历史版本(保留代码)
git reset 版本号
# 5. 彻底回退版本(删除代码,谨慎)
git reset --hard 版本号
四、分支管理(团队协作核心)
4.1 查看分支
bash
# 查看本地分支(当前分支前有 *)
git branch
# 查看远程分支
git branch -r
# 查看所有分支(本地+远程)
git branch -a
4.2 创建与切换分支
bash
# 1. 旧方式(checkout)
# 创建分支(不切换)
git branch feature/login
# 创建并切换
git checkout -b feature/login
# 2. 新方式(switch,Git 2.23+ 推荐)
# 切换分支
git switch main
# 创建并切换
git switch -c feature/login
4.3 合并分支
bash
# 1. 先切换到主分支(如 main)
git switch main
# 2. 合并目标分支(如 feature/login)
git merge feature/login
-
合并冲突解决 :
- 冲突文件会标记:
markdown<<<<<<< HEAD 主分支代码 ======= 功能分支代码 >>>>>>> feature/login- 手动编辑文件,删除标记,保留正确代码
git add 冲突文件→git commit -m "合并分支,解决冲突"
4.4 变基分支(Rebase,保持提交线性)
bash
# 1. 切换到功能分支
git switch feature/login
# 2. 变基到 main 分支(将功能分支提交"移植"到 main 最新提交后)
git rebase main
# 冲突解决后继续
git rebase --continue
# 放弃变基
git rebase --abort
# 3. 回到 main 合并(快进合并,无新提交)
git switch main
git merge feature/login
4.5 删除分支
bash
# 删除本地已合并分支
git branch -d feature/login
# 强制删除本地未合并分支
git branch -D feature/login
# 删除远程分支
git push origin --delete feature/login
五、远程仓库协作
5.1 管理远程仓库
bash
# 查看远程仓库(默认 origin)
git remote
# 查看详细信息(含拉取/推送地址)
git remote -v
# 添加远程仓库(本地关联远程)
git remote add origin https://github.com/xxx/xxx-repo.git
# 修改远程仓库地址
git remote set-url origin https://new-url.git
# 删除远程关联
git remote remove origin
5.2 拉取远程更新
bash
# 拉取并合并远程当前分支(常用)
git pull
# 拉取指定分支
git pull origin main
# 仅拉取不合并(安全,手动合并)
git fetch origin
# 拉取所有远程分支
git fetch --all
5.3 推送本地到远程
bash
# 首次推送本地分支到远程(关联)
git push -u origin main
# 后续推送
git push
# 推送指定分支
git push origin feature/login
# 强制推送(谨慎!覆盖远程代码)
git push --force origin main
六、标签管理(版本发布)
bash
# 查看所有标签
git tag
# 创建轻量标签(仅标记提交)
git tag v1.0.0
# 创建附注标签(含说明、作者、日期)
git tag -a v1.0.0 -m "正式发布v1.0.0"
# 推送单个标签到远程
git push origin v1.0.0
# 推送所有标签
git push --tags
# 删除本地标签
git tag -d v1.0.0
# 删除远程标签
git push origin --delete v1.0.0
七、高级操作
7.1 cherry-pick(挑选指定提交到当前分支)
bash
# 挑选提交 a1b2c3 到当前分支
git cherry-pick a1b2c3
# 冲突解决后继续
git cherry-pick --continue
# 放弃
git cherry-pick --abort
7.2 stash(暂存临时修改,切换分支不丢失)
bash
# 暂存所有修改
git stash
# 暂存并加备注
git stash save "临时保存登录功能修改"
# 查看暂存列表
git stash list
# 恢复最新暂存(删除暂存记录)
git stash pop
# 恢复指定暂存(保留暂存记录)
git stash apply stash@{0}
# 删除指定暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear
7.3 reflog(查看所有操作记录,找回"丢失"提交)
bash
# 查看所有提交、切换分支、reset 等记录
git reflog
# 找回误删提交(找到 commit id 后)
git reset --hard a1b2c3
7.4 bisect(二分查找定位bug引入的提交)
bash
# 开始查找
git bisect start
# 当前版本有bug
git bisect bad
# 已知正常提交(如 v1.0.0)
git bisect good v1.0.0
# Git 会自动切换中间提交,测试后标记 good/bad
# 找到bug提交后,结束
git bisect reset
八、常见问题解决
8.1 提交后发现用户名/邮箱错误
bash
# 修改最近一次提交的用户信息
git commit --amend --author="正确名字 <正确邮箱@example.com>"
8.2 合并/变基冲突无法解决
- 放弃合并:
git merge --abort - 放弃变基:
git rebase --abort
8.3 本地提交落后远程太多,无法 push
bash
# 先拉取远程并合并(解决冲突)
git pull origin main
# 再推送
git push