Git能否自动将提交分成单个块?

4

正如之前的问题所解释的那样,您可以将提交拆分为较小的补丁。但是,这些答案建议使用git add -p,虽然它可以完成工作,但如果我只想每个修补程序提交一个提交,并按照文件中给定的顺序执行,则会变得乏味。有没有什么办法能够自动实现它?


1
如果你想知道为什么我需要这个:由于自动代码格式化工具的更改,我有一个巨大的提交。这导致了运行时错误;如果每个“hunk”都在自己的提交中,我可以轻松使用git bisect来找到它。 - leftaroundabout
划分代码块的规则是什么?一个文件等于一个提交吗? - Nick Volynkin
@NickVolynkin:我对git add -p提供的代码块感到满意。 - leftaroundabout
1个回答

7
你可以像这样做:
echo -e "y\nq" | git add -p && git commit -m "automated"

以下是需要翻译的内容:

which does:

输出 y(接受第一个 hunk),然后输入 q(退出)以便下一个 hunk,使用给定的消息进行提交。

循环执行,直到git commit未返回成功:

s=0 
i=1
while [ $s -eq 0 ]
do 
  echo -e "y\nq" | git add -p && git commit -m "automated $i"
  s=$?
  let i=$i+1
done

或者在一行中:

s=0; i=0; while [ $s -eq 0 ]; do echo -e "y\nq" | git add -p && git commit -m "automated $i"; s=$?; let i=$i+1; done

生成类似以下的提交:

c5ba3 - (HEAD) automated 3
14da0 - automated 2
6497b - automated 1

更多是 bash / sh 解决方案而不是 git,看起来有些 hackish,但如果没有本地替代方案的话,我可以接受。 - leftaroundabout
1
addp 不是打错了或者别名吗? - Nick Volynkin
@leftaroundabout 是的,我也这么想,但是对于我的小测试来说它运行得很好 ;)。 - martin
echo -e "y\nq" 更改为 echo -e "s\ny\nq",以获得更小的Hunks。 - CDanU
在两行中,您只需手动重复第二行,直到完成为止:i=1echo -e "y\nq" | git add -p && git commit -m "automated $i"; let i=i+1 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接