Git 进阶操作

在掌握了 Git 的基础操作之后,进阶操作可以帮助你更高效地管理和优化你的代码库。

以下是一些常见的进阶操作及其详细说明:

  • 交互式暂存:逐块选择要暂存的更改,精细控制提交内容。
  • Git Stash:临时保存工作进度,方便切换任务。
  • Git Rebase:将一个分支上的更改移到另一个分支之上,保持提交历史线性。
  • Git Cherry-Pick:选择特定提交并应用到当前分支。

1、交互式暂存(Interactive Staging)

git add 命令可以选择性地将文件或文件的一部分添加到暂存区,这在处理复杂更改时非常有用。

  • 使用 git add -p:逐块选择要暂存的更改。
git add -p

执行此命令后,Git 会逐块显示文件的更改,你可以选择是否暂存每个块。常用选项包括:

  • y:暂存当前块
  • n:跳过当前块
  • s:拆分当前块
  • e:手动编辑当前块
  • q:退出暂存

2、Git Stash:临时保存工作进度

git stash 命令允许你临时保存当前工作目录的更改,以便你可以切换到其他分支或处理其他任务。

保存当前工作进度

git stash

查看存储的进度

git stash list

应用最近一次存储的进度

git stash apply

应用并删除最近一次存储的进度

git stash pop

删除特定存储

git stash drop stash@{n}

清空所有存储

git stash clear

3、Git Rebase:变基

git rebase 命令用于将一个分支上的更改移到另一个分支之上。它可以帮助保持提交历史的线性,减少合并时的冲突。

变基当前分支到指定分支

git rebase <branchname>

例如,将当前分支变基到 main 分支:

git rebase main
  • 交互式变基
git rebase -i <commit>

交互式变基允许你在变基过程中编辑、删除或合并提交。常用选项包括:

  • pick:保留提交
  • reword:修改提交信息
  • edit:编辑提交
  • squash:将当前提交与前一个提交合并
  • fixup:将当前提交与前一个提交合并,不保留提交信息
  • drop:删除提交

4、Git Cherry-Pick:拣选提交

git cherry-pick 命令允许你选择特定的提交并将其应用到当前分支。它在需要从一个分支移植特定更改到另一个分支时非常有用。

拣选提交

git cherry-pick <commit>

例如,将 abc123 提交应用到当前分支:

git cherry-pick abc123

处理拣选冲突:如果拣选过程中出现冲突,解决冲突后使用 git cherry-pick --continue 继续拣选。

示例操作

以下是一个综合示例,展示了如何使用这些进阶操作:

交互式暂存

git add -p

保存工作进度

git stash

查看存储的进度

git stash list

应用存储的进度

git stash apply

变基当前分支到 main 分支

git rebase main

交互式变基,编辑提交历史

git rebase -i HEAD~3

编辑提交历史,如合并和重命名提交。

拣选 feature 分支上的特定提交到 main 分支

git checkout main
git cherry-pick abc123