git 常用命令( rebase和reset)
一、代码的合并
1. 当合并代码并在解决冲突时,想终止当前合并
git reset --merge
2. 终止合并之后,一直是变基状态,想要停止变基
git rebase --abort
3. 在合并代码时,解决完冲突之后,想要提交,先别急着提,先执行continue
git merge --continue
二、git rebase:重置分支状态
| 模式 | 作用 | 风险等级 |
|---|---|---|
| --soft | 仅移动HEAD,不修改暂存区(Index)和工作区(Working Directory) | 低 |
| --mixed | (默认)移动HEAD,并重置暂存区,但保留工作区文件修改 | 中 |
| --hard | 移动HEAD,并丢弃暂存区和工作区的所有修改 | 高 |
典型场景
- 撤销未推送的提交
//回退到前一个提交(保留修改到工作区)
git reset HEAD~1 --mixed
//彻底丢弃最近一次提交(包括工作区修改)
git reset HEAD~1 --hard
- 取消已暂存的文件
git reset HEAD <file> //取消暂存文件的修改
- 修复分支指向:将分支回退到某个历史提交
注意事项:
1.仅限于本地操作:如果提交已推送到远程仓库,强制推送(git push -f)可能导致协作问题。
2.数据丢失:--hard 会永久删除未提交的修改
三、git rebase: 变基整合提交
作用:将当前分支的提交“重新播放”到另一个分支的最新提交之后,整理提交历史,常用于保持提交历史的线性化。
核心用途:
- 合并分支:将特性分支的提交变基到主分支上(merge commit)
git checkout feature-branch
git rebase main //将feature-branch 的提交“移植”到main分支的最新提交之后
- 整理本地提交:合并多个提交(squash)、修改提交信息或调整提交顺序
git rebase -I HEAD~3 //交互式整理最近3个提交
- 同步远程更新:拉取远程分支时使用 git pull --rebase,避免合并提交。
- 典型流程:
# 假设当前在 feature-branch
git rebase main # 变基到 main 分支的最新提交
# 解决可能的冲突
git add . # 标记冲突已解决
git rebase --continue # 继续变基
git rebase --abort # 终止变基(回到原始状态)
总结
| 特性 | git reset | git rebase |
|---|---|---|
| 用途 | 撤销提交、回退分支状态 | 整理提交历史、合并提交 |
| 影响范围 | 当前分支的提交历史 | 当前分支的提交历史(可能影响其他分支) |
| 协作风险 | 低(仅限本地未推送的提交) | 高(若已推送并变基,需强制推送覆盖) |
| 历史修改方式 | 直接移动 HEAD,丢弃提交 | 重新应用提交到新的基节点,生成新提交 |
| 适用场景 | 本地回退、撤销修改 | 保持提交线性、清理历史 |
最佳实践:
1. git reset:
使用 --soft 或 --mixed 撤销本地提交。
仅在确认需要丢弃修改时使用 --hard。
避免对已推送的分支执行 reset + 强制推送。
2. git rebase:
在合并分支前优先使用 rebase,保持历史整洁。
使用 git pull --rebase 替代默认的 git pull 避免多余合并提交。
不要对公共分支(如 main、dev)执行变基。
点个赞吧

浙公网安备 33010602011771号