Git 进阶操作(十)

10.进阶操作

四种常用进阶操作:交互式暂存、Git Stash、Git Rebase 和 Git Cherry-Pick。

一、交互式暂存

git add -p 可以逐块(hunk)选择性地将工作区中的更改添加到暂存区,适合只提交部分修改或拆分复杂变更。

git add -p

执行后,Git 会逐块显示差异,并提示操作选项:

选项 说明
y 暂存当前块
n 跳过当前块
s 拆分当前块
e 手动编辑当前块
q 退出暂存
? 显示帮助

二、Git Stash – 暂存工作进度

git stash 将当前工作目录和暂存区中未提交的更改保存到栈中,恢复工作区为干净状态,便于切换分支或处理紧急任务。

命令 说明
git stash 保存当前工作进度(可加 save "message"
git stash list 列出所有保存的 stash
git stash apply 应用最近一次 stash,但不删除
git stash pop 应用最近一次 stash,并删除
git stash apply stash@{n} 应用指定 stash(如 stash@{1}
git stash drop stash@{n} 删除指定 stash
git stash clear 清空所有 stash

提示:git stash​ 默认只保存已跟踪文件的修改。如需保存未跟踪文件,可加 -u 选项。

三、Git Rebase – 变基

git rebase 将当前分支的提交“重新播放”到另一个分支的顶部,使提交历史保持线性,减少不必要的合并提交。

1.基本变基

git checkout feature
git rebase main

feature​ 分支的提交变基到 main 分支的最新提交之上。

2.交互式变基

git rebase -i HEAD~3

对最近 3 次提交进行交互式操作,常用指令:

指令 作用
pick 保留该提交
reword 修改提交信息
edit 修改提交内容
squash 合并到前一个提交(保留两个提交信息)
fixup 合并到前一个提交(丢弃当前提交信息)
drop 删除提交

注意:变基会改写提交历史。不要对已推送到公共仓库的分支进行变基,以免造成团队协作混乱。

四、Git Cherry-Pick – 拣选提交

git cherry-pick 将一个或多个特定提交应用到当前分支,常用于移植 bug 修复或特定功能。

git cherry-pick <commit-hash>

1.常用场景与选项

  • 拣选多个提交git cherry-pick commit1 commit2

  • 拣选一段连续提交git cherry-pick start-commit^..end-commit

  • 拣选时不自动提交git cherry-pick -n <commit>(暂存到工作区,可继续修改)

  • 解决冲突:若拣选过程中出现冲突,解决后执行:

    git add .
    git cherry-pick --continue

    放弃拣选:git cherry-pick --abort

五、综合示例

# 1. 交互式暂存部分修改
git add -p

# 2. 临时保存未完成的工作
git stash save "WIP: 未完成的功能"

# 3. 切换到 main 分支,拉取最新更新
git checkout main
git pull

# 4. 将 feature 分支变基到 main
git checkout feature
git rebase main

# 5. 修复 bug 后,将提交 cherry-pick 到 main
git checkout main
git cherry-pick 4a5b6c7

# 6. 恢复之前保存的工作进度
git stash pop

六、总结

操作 用途
git add -p 精细控制暂存内容
git stash 临时保存工作现场,切换任务
git rebase 保持线性历史,使提交记录更清晰
git cherry-pick 选择性移植特定提交

合理使用这些进阶命令可以大幅提升 Git 使用效率和代码管理质量。建议在个人分支或本地仓库中多加练习,熟悉后再用于团队协作场景。