我有一个我一直在处理的文件,然后意识到我在上面几行我一直在工作的地方有一个错误。我很快纠正了这个错误,并想在我提交其余的工作之前提交它。太好了,这就是 git add --patch 的用武之地!
除了,我只看到了一个包含这两种变化的大块头。是否可以手动告诉 git 我想要两个帅哥?
除了 'y' 和 'n' 之外,当它询问你一个大块时,你可以给出的答案之一是 's',即“将这个大块分成更小的块”。完整名单:
y - stage this hunk
n - do not stage this hunk
q - quit, do not stage this hunk nor any of the remaining ones
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
git gui
将允许您提交单行,即使它们被您不想提交的其他修改行包围。
在 Git 2.25(2020 年第一季度)中,将“ git-add--interactive
” Perl 脚本移至 C 的工作仍在继续。
结果,大块拆分功能(使用“ s”键访问的功能)将发生变化。
请参阅提交2E40831,提交54D9D9B,提交ADE246E,提交D6CF873,COMMIS 9254BDF,COMMIT BCDD297,COMMIT B38DD9E ,提交11F2C0D,提交510AECA,提交510AECA,提交0ecd9d2,提交5906D . e3bd11b,提交 1942ee4,提交 f6aa7ec(2019 年 12 月 13 日)由约翰内斯辛德林(dscho
)。
(由Junio C Hamano 合并gitster
——在提交 45b96a6中,2019 年 12 月 25 日)
built-in add -p
:实现大块拆分功能签字人:约翰内斯·辛德林
如果这个开发人员的工作流程有任何迹象,那么这是Git 交互式命令中最有用的功能。
add
注意:再一次,这不是从 Perl 代码到 C 的逐字转换:
hunk_splittable()
例如,该函数基本上完成了拆分大块的所有工作,只是为了找出结果是否会超过一个大块(并且然后将该结果扔进垃圾桶)。
在 C 中,我们计算生成的大块的数量(实际上没有进行拆分工作,而只是计算从非上下文行到上下文行的转换),并将该信息与大块一起存储,我们在解析首先是差异。另一个偏差:内置的
git add -p
设计有一个单独的 strbuf 保存差异(如果需要的话,另一个保存彩色差异),并且大块基本上只存储指向该 strbuf 的开始和结束偏移量。
因此,当我们拆分大块时,我们现在使用一种特殊的模式,其中大块头是动态生成的,并且只有大块的其余部分使用这样的开始/结束偏移量来存储。这样,我们也避免了 Perl 版本的大块头的频繁格式化/重新解析。