Git进阶基于文件(夹)拆分大PR


在 Git 项目中,当一个 Pull Request (PR) 包含太多更改时,审查和合并它可能会变得困难。将大型 PR 拆分成较小的、更易管理的 PR 是一个很好的实践。基于文件或文件夹的拆分方法是一个有效的策略。以下是一些详细的步骤和方法,帮助你将一个大型 PR 拆分成多个较小的 PR。

步骤 1: 创建一个新分支

首先,从当前的 PR 分支创建一个新的分支。

git checkout -b feature/split-part1

步骤 2: 选择要拆分的文件(文件夹)

决定你要在第一个拆分 PR 中包含哪些文件或文件夹。可以使用 git add 命令选择这些文件。

git add path/to/file1 path/to/folder1/*

步骤 3: 提交更改

提交所选文件的更改。

git commit -m "Split part 1: Description of changes"

步骤 4: 推送新分支并创建 PR

将新分支推送到远程仓库并创建一个新的 PR。

git push origin feature/split-part1

然后在代码托管平台上(如 GitHub、GitLab)创建一个新的 PR。

步骤 5: 重置原始分支

返回到原始分支并重置未提交的更改。

git checkout original-branch
git reset HEAD path/to/file1 path/to/folder1/*

这会将这些文件从暂存区中移除,但保留在工作目录中。

步骤 6: 创建下一个拆分分支

从原始分支创建一个新的拆分分支,并重复上述步骤。

git checkout -b feature/split-part2
git add path/to/file2 path/to/folder2/*
git commit -m "Split part 2: Description of changes"
git push origin feature/split-part2

步骤 7: 清理并重复

回到原始分支,继续重置未提交的更改,并重复步骤 6,直到所有更改都被拆分并提交。

额外技巧

使用交互式暂存

你可以使用 git add -pgit add -i 命令来逐块选择要添加的更改。这对于在同一文件中拆分更改特别有用。

git add -p

使用 git stash

如果你想暂时保存未提交的更改,可以使用 git stash

git stash push -m "Save changes before splitting"

在需要时可以使用 git stash pop 恢复更改。

示例脚本

以下是一个简单的脚本示例,展示如何自动化部分拆分过程:

#!/bin/bash

# 原始分支名称
ORIGINAL_BRANCH="original-branch"

# 文件或文件夹数组
FILES=("path/to/file1" "path/to/folder1/*" "path/to/file2" "path/to/folder2/*")

# 拆分并创建 PR 的循环
for i in "${!FILES[@]}"; do
  PART_BRANCH="feature/split-part$((i+1))"

  # 创建并切换到新的分支
  git checkout -b $PART_BRANCH

  # 添加文件或文件夹
  git add ${FILES[$i]}

  # 提交更改
  git commit -m "Split part $((i+1)): Description of changes"

  # 推送新分支
  git push origin $PART_BRANCH

  # 回到原始分支并重置文件或文件夹
  git checkout $ORIGINAL_BRANCH
  git reset HEAD ${FILES[$i]}
done

总结

通过这些步骤和技巧,可以有效地将一个大型 PR 拆分成多个小型、更易管理的 PR。这不仅使代码审查过程更容易和高效,也有助于提高代码质量和团队协作效率。


原文链接:codingdict.net