在 Git 项目中,当一个 Pull Request (PR) 包含太多更改时,审查和合并它可能会变得困难。将大型 PR 拆分成较小的、更易管理的 PR 是一个很好的实践。基于文件或文件夹的拆分方法是一个有效的策略。以下是一些详细的步骤和方法,帮助你将一个大型 PR 拆分成多个较小的 PR。
首先,从当前的 PR 分支创建一个新的分支。
git checkout -b feature/split-part1
决定你要在第一个拆分 PR 中包含哪些文件或文件夹。可以使用 git add 命令选择这些文件。
git add
git add path/to/file1 path/to/folder1/*
提交所选文件的更改。
git commit -m "Split part 1: Description of changes"
将新分支推送到远程仓库并创建一个新的 PR。
git push origin feature/split-part1
然后在代码托管平台上(如 GitHub、GitLab)创建一个新的 PR。
返回到原始分支并重置未提交的更改。
git checkout original-branch git reset HEAD path/to/file1 path/to/folder1/*
这会将这些文件从暂存区中移除,但保留在工作目录中。
从原始分支创建一个新的拆分分支,并重复上述步骤。
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
回到原始分支,继续重置未提交的更改,并重复步骤 6,直到所有更改都被拆分并提交。
你可以使用 git add -p 或 git add -i 命令来逐块选择要添加的更改。这对于在同一文件中拆分更改特别有用。
git add -p
git add -i
git stash
如果你想暂时保存未提交的更改,可以使用 git stash。
git stash push -m "Save changes before splitting"
在需要时可以使用 git stash pop 恢复更改。
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