我知道如何使用手动拆分提交git rebase -i
,但是如何按文件自动拆分分支中的每个提交?
例如,提交A
修改了3个文件,f1、f2和f3。拆分后,有 3 个提交 A-f1、A-f2 和 A-f3。
我想这样做是为了使主要重写变得更容易,因为我只需要压缩一些小的提交。
剧本
以下脚本拆分HEAD
按文件:
#!/usr/bin/env bash
set -e
SHA=$(git rev-parse --short HEAD)
# Change to repo root directory
cd $(git rev-parse --show-toplevel)
git reset HEAD^
git diff-tree --no-commit-id --name-only -r $SHA | while read -r f; do
git add "$f"
GIT_EDITOR="echo '0a\n$SHA $f\n\n.\nw' | ed -s" git commit -c $SHA
done
生成的提交消息的形式为:
<original SHA> <file name>
<original commit message>
Usage
以下假设您可以运行上面的脚本git-split
.
如果您想按文件拆分某个范围内的所有提交,请像这样使用它:
git rebase --interactive --exec git-split <branch>
如果您想在交互式变基期间拆分单个提交,请像这样使用它:
p Commit to split
x git-split
欢迎对脚本进行任何改进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)