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 使用效率和代码管理质量。建议在个人分支或本地仓库中多加练习,熟悉后再用于团队协作场景。