以下是几个常见的 Git 使用场景及对应的解决方法,结合实际案例说明:
场景 1:合并分支时发生冲突
问题描述:
在合并 feature/login
分支到 main
分支时,Git 提示文件冲突:
Auto-merging src/login.js
CONFLICT (content): Merge conflict in src/login.js
解决方法:
- 手动打开冲突文件
src/login.js
,找到冲突标记(<<<<<<<
、=======
、>>>>>>>
)。 - 根据需求选择保留的代码(或合并双方修改),删除冲突标记。
- 标记冲突已解决:
git add src/login.js git commit -m "resolve merge conflict in login.js"
场景 2:误提交敏感文件
问题描述:
不小心将包含密码的 config.yaml
文件提交到了仓库:
git commit -m "update config"
解决方法:
- 从提交历史中彻底删除文件:
# 删除历史中的 config.yaml(交互式 rebase) git rebase -i HEAD~2 # 找到误提交的 commit # 在 rebase 过程中删除相关 commit 或修改文件 git push --force # 强制推送(谨慎使用!)
- 更新 .gitignore:
在.gitignore
中添加config.yaml
,避免再次提交。
场景 3:撤销未推送的提交
问题描述:
在本地提交了错误的代码,但尚未推送到远程仓库:
git log --oneline
# 输出:a1b2c3d (HEAD -> main) fix: typo in header
解决方法:
- 撤销提交但保留修改(回退到工作区):
git reset --soft HEAD~1
- 彻底丢弃提交和修改(回退到上一个版本):
git reset --hard HEAD~1
场景 4:紧急修复线上 Bug,但当前开发未完成
问题描述:
正在开发新功能(分支 feature/cart
),突然需要修复线上紧急 Bug。
解决方法:
- 暂存当前修改:
git stash # 保存工作区修改
- 切换到主分支并创建修复分支:
git checkout main git checkout -b hotfix/payment-error
- 修复并提交:
git commit -m "fix: payment gateway timeout" git push origin hotfix/payment-error
- 回到原分支继续开发:
git checkout feature/cart git stash pop # 恢复暂存修改
场景 5:误删本地分支
问题描述:
误删除了本地未合并的分支 feature/search
,但该分支曾提交到远程仓库。
解决方法:
- 从远程仓库拉取分支:
git fetch origin feature/search git checkout -b feature/search origin/feature/search
- 若未推送过远程,但本地有提交记录:
通过git reflog
查找删除前的 commit hash,重建分支:git reflog # 找到误删前的 commit(如 a1b2c3d) git checkout -b feature/search a1b2c3d
场景 6:修改历史提交信息
问题描述:
需要修改最近一次提交的注释信息:
git log --oneline
# 输出:d4e5f6g (HEAD -> main) fix: typoo in title
解决方法:
git commit --amend -m "fix: typo in title"
git push --force # 强制推送(仅限未协作的分支)
场景 7:代码回滚到指定版本
问题描述:
最新代码引入严重 Bug,需回滚到稳定版本(commit hash 为 a1b2c3d
)。
解决方法:
- 保留回滚记录(推荐协作场景):
git revert a1b2c3d # 生成一个撤销 commit git push
- 彻底删除后续提交(仅限本地或私有分支):
git reset --hard a1b2c3d git push --force
总结:Git 核心命令速查
场景 | 关键命令 | 注意事项 |
---|---|---|
合并冲突 | git add + git commit | 解决后必须标记文件为已解决 |
撤销未推送提交 | git reset --soft/hard | --hard 会丢失工作区修改 |
暂存工作区 | git stash | 结合 pop 或 apply 恢复 |
恢复误删分支 | git reflog + git checkout | 依赖本地 reflog 记录 |
修改提交历史 | git commit --amend / git rebase | 强制推送前确保分支未被协作 |
代码回滚 | git revert / git reset | revert 安全,reset 彻底 |
注意事项:
- 强制推送(
--force
)可能覆盖他人代码,协作分支慎用! - 涉及历史修改的操作(如
rebase
)应在私有分支进行。