如何分割每个提交文件?
我知道如何使用git rebase -i
手动分割一个提交,但是我怎样才能通过文件自动拆分分支中的每个提交?
例如,提交A
修饰的3个文件中,f1,f2和f3。 分割后,有3个提交A-f1,A-f2和A-f3。
我想这样做是为了让重写更容易,因为我只需要压缩一些小的提交。
剧本
以下脚本按文件分割HEAD
:
#!/bin/bash
set -e
LF=$'n'
SHA=$(git rev-parse --short HEAD)
MSG=$(git show -s --format=%B HEAD)
set -f; IFS=$'n'
FILES=($(git diff-tree --no-commit-id --name-only -r HEAD))
set +f; unset IFS
git reset HEAD^
for f in "${FILES[@]}"; do
git add "$f"
git commit -m "$SHA $f$LF$LF$MSG"
done
生成的提交消息的格式如下:
<original SHA> <file name>
<original commit message>
用法
以下假设你可以在脚本上面运行git-split
。
如果你想通过文件拆分一个范围内的所有提交,请像这样使用它:
git rebase --interactive --exec git-split <branch>
如果您想在交互式重新分版期间拆分单个提交,请使用如下所示:
p Commit to split
x git-split
欢迎对脚本进行任何改进。
对于每一次提交,你都需要
首先列出该提交中的所有文件
git diff-tree --no-commit-id --name-only -r <SHA1>
然后为每个文件提取该文件
git show <SHA1>:/path/within/repo/to/file
在专用分支的工作树中执行此操作,并为每个提取的文件添加和提交。
然后你可以通过commit-file建立一个新的commit-file来重置你当前的分支。
链接地址: http://www.djcxy.com/p/26659.html