Git将fixup commit分发给原始提交

时间:2014-10-07 11:17:41

标签: git

进行以下微不足道的提交

# define function in one file
echo "function foo () {}" > a
git add a
git commit -m "1st commit"

# call the function in different file
echo "foo()" > b
git add b
git commit -m "2nd commit"

# rename foo to bar in both files
echo "function bar () {}" > a
echo "bar()" > b
git commit -am "fixup"

是否可以自动拆分修复提交以更新以前的提交?

我认为如果fixup commit只更改了原始提交中更改的行,那么确实可以通过算法精确地拆分fixup提交。是这样的吗?如果是这样,git是否支持它?

我知道可以使用多个rebase并手动拆分fixup提交,但这不是我之后的事。

澄清:想象一下在功能分支上工作。你有很多提交。在代码审查时,发现例如方法foo应该命名为方法bar。现在,在推送到上游之前,我不仅要更改它的所有实例,而是添加新的提交,但拆分最后一次提交并将其应用于相应的先前提交。

1 个答案:

答案 0 :(得分:1)

如果我将您的问题解释为“我如何在其出现的所有提交中重命名函数”,那么以下工作(针对您提供的两个示例提交进行测试,但不打算完全正常运行)。

在处理功能分支时,您需要将其传递给限制filter-branch尝试处理的提交数量。

git filter-branch --tree-filter 'git grep --name-only foo | xargs sed -i "s/foo/bar/g"'