git - 从一个大分支的许多提交中创建多个分支
问题描述
我有一个大型功能分支,在那里我做了很多非常小的代码清理(这些都是相关的)。这个分支包含大约 100 多个提交,每个大约 1-5 行,每个通常只涉及 1 个,也许是 2 个文件。
我和我的团队更喜欢尽量减少拉取请求,以便更容易审查并在出现问题时恢复。
我的问题是,从我的大型功能分支一次“自动”拉(比方说)5 个提交到他们自己的新分支中,然后推送它们,然后重复直到功能分支中没有更多提交的最佳方法是什么?
我知道我将如何手动执行此操作,并且该过程看起来像这样:
# Go to branch we want PRs to target:
git checkout main
# New PR branch:
git checkout -b cleanup/part-1
# Grab some commits from the large cleanup branch:
git cherry-pick <SOME_COMMIT_HASH>
git cherry-pick <SOME_COMMIT_HASH>
git cherry-pick <SOME_COMMIT_HASH>
git cherry-pick <SOME_COMMIT_HASH>
git cherry-pick <SOME_COMMIT_HASH>
# Push, create a PR, then repeat steps for ~100 commits :\
git push
我想知道是否有更好的方法来做到这一点,因为我觉得这会有点乏味。
解决方案
如果您不希望对合并/拉取请求进行更改,您可以简单地将分支标签添加到有问题的提交中。gitk
可以提供帮助:只需单击提交并选择“创建分支”;然后推这个分支。当然,这也可以在命令行上完成,但这需要更多的输入(git branch pr1 commithash
并且您需要先找出提交哈希)。
让我举例说明:
o <- your-branch
o
o <- pr3
o
o <- pr2
o
o <- pr1
o
“your-branch”是包含所有更改的原始分支。pr1
将仅包含前两个更改。
创建pr1
、推送、创建 PR/MR,对其进行审核和合并。然后 push pr2
, push,合并。冲洗并重复。一旦一个分支被合并,它的更改将不会显示在后续分支的未来 PR/MR 中(Git 可以通过 DAG 检测哪些提交是新的并且需要合并,哪些提交已经之前已经合并)。
如果您总是将 5 个提交分组,那么 100 个提交大约需要 20 步。已经有了很大的进步。
如果您的任务可以通过顽固地接受每一次提交来完成,那么您可以使用 shell 循环来创建分支,例如:
git rev-list --reverse main..your-branch \
| sed -n '0~5p' \
| nl \
| while read -r num commit; do \
git branch "pr-$num" "$commit"; \
done
(sed 调用可以替换为awk 'NR % 5 == 0'
,但这并不重要。结果在大多数系统上都是相同的)
推荐阅读
- java - 将所有 Maven 库批量添加到 IntelliJ 中的类路径
- javascript - 如何在 UserId 前面设置 userName(在顶部父键处)
- python-3.x - 试试,除了,回来试试?
- laravel - 如何修复 mpdf 临时文件目录可写问题?
- java - 从 Spring Boot 调用 Oracle PL/SQL 函数时出错
- django - Django:我想为多对多表自动输入字段“id”
- javascript - 在管道流节点js中间添加
- node.js - 安装错误 - libcurl 中不支持或禁用协议“https”
- html - 在 Bootstrap css 网格中展开列移动其他列
- reactjs - 使用 Jest 进行单元测试,预计接收空/未定义对象会出现问题