我想要一个能让我做类似命令的命令:
git manual-add some_file.txt 10..20
这相当于:
git add -p some_file.txt
并且只对包含第10行到第20行的hunk说y
。
是否有内部git命令可以让我这样做?是否有任何方式可以完成?
答案 0 :(得分:3)
您可以利用git add -e
命令并将其作为编辑器传递给它一个脚本(在下面的示例中,它名为filterpatch
),它将根据您的要求编辑补丁(请参阅git add
文档中的"编辑补丁"部分:
EDITOR="filterpatch 10..20" git add -e some_file.txt
为方便起见,您可以按如下方式添加git别名:
git config alias.manual-add '!EDITOR="filterpatch $2" git add -e $1; :'
一个愚蠢的filterpatch
脚本示例,该脚本在补丁的指定范围内为所有添加的行添加foo
前缀:
#!/bin/bash -x
sed -i "$1 s/^+\([^+]\)/+foo \1/" "$2"
用法示例:
git manual-add some_file.txt 13,16
所以剩下的部分是关于正确实现filterpatch
脚本 - 它必须解析差异并取消选择不属于目标范围的帅哥。
答案 1 :(得分:2)
为您的配置添加别名:
[alias]
addp = "!sh -c 'git commit -m temp \"$1\" && git log -1 -u -L \"$2\":\"$1\" > ptc.patch && git reset HEAD^ && git apply --cached ptc.patch ' -"
现在你可以:
git addp a.txt 3,4
此序列将:
ptc.patch
。