Skip to main content

Git 实战场景

1. 修改历史提交

场景一:修改最近一次提交信息

# 修改最后一次提交的信息
git commit --amend -m "新的提交信息"

# 如果已推送到远程,需要强制推送
git push --force origin main

场景二:修改历史提交信息

# 修改某个历史提交的信息
git rebase -i <commit-hash>~1

# 在编辑器中将 'pick' 改为 'reword' 或 'r'
# 保存后在新的编辑器中修改提交信息
# 强制推送
git push --force origin main
  1. 回退代码
  2. 修改提交信息,然后保存退出
  3. 强制推送到远端

场景三:合并多个提交

# 合并最近的 3 个提交
git rebase -i HEAD~3

# 在编辑器中保留第一个 'pick',将后面的 'pick' 改为 'squash' 或 's'
# 保存后在新的编辑器中编辑合并后的提交信息

2. 版本回退

场景一:回退到指定版本

# 创建备份分支
git checkout -b backup-branch

# 返回主分支
git checkout main

# 硬回退到指定提交
git reset --hard <commit-hash>

# 强制推送
git push --force origin main

场景二:撤销错误的回退

# 从备份分支恢复
git checkout backup-branch
git branch -D main
git checkout -b main
git push --force origin main

3. 分支管理

场景一:功能分支开发

# 创建并切换到功能分支
git checkout -b feature/new-feature

# 开发完成后合并到主分支
git checkout main
git merge feature/new-feature

# 删除功能分支
git branch -d feature/new-feature

场景二:解决合并冲突

# 当合并出现冲突时
git status # 查看冲突文件
git diff # 查看具体冲突

# 手动解决冲突后
git add .
git commit -m "解决合并冲突"

4. 紧急修复

场景一:热修复

# 从主分支创建热修复分支
git checkout -b hotfix/bug-fix main

# 修复完成后合并回主分支
git checkout main
git merge hotfix/bug-fix
git tag -a v1.0.1 -m "紧急修复版本"

# 同步到开发分支
git checkout develop
git merge hotfix/bug-fix

5. 代码暂存

场景一:临时切换分支

# 暂存当前修改
git stash save "正在开发的功能"

# 切换分支处理其他事情
git checkout other-branch

# 返回后恢复修改
git checkout original-branch
git stash pop

场景二:多个暂存

# 查看暂存列表
git stash list

# 应用指定的暂存
git stash apply stash@{2}

# 删除指定的暂存
git stash drop stash@{2}

6. 远程仓库操作

场景一:同步远程分支

# 获取远程更新
git fetch origin

# 合并远程更新
git merge origin/main

# 或者使用拉取(相当于 fetch + merge)
git pull origin main

场景二:清理远程分支

# 查看远程分支
git remote show origin

# 清理已删除的远程分支
git remote prune origin

# 删除远程分支
git push origin --delete feature/old-feature

7. 撤销操作

场景一:撤销工作区修改

# 撤销单个文件的修改
git checkout -- <file>

# 撤销所有修改
git checkout .

场景二:撤销暂存区修改

# 将文件从暂存区移回工作区
git reset HEAD <file>

# 撤销所有暂存
git reset HEAD

8. 日志查看

场景一:查看提交历史

# 查看简洁历史
git log --oneline

# 查看图形化历史
git log --graph --oneline --all

# 查看指定文件的历史
git log -p <file>

场景二:查找特定提交

# 搜索提交信息
git log --grep="关键词"

# 搜索代码变更
git log -S "代码片段"