29

我有一个我一直在处理的文件,然后意识到我在上面几行我一直在工作的地方有一个错误。我很快纠正了这个错误,并想在我提交其余的工作之前提交它。太好了,这就是 git add --patch 的用武之地!

除了,我只看到了一个包含这两种变化的大块头。是否可以手动告诉 git 我想要两个帅哥?

4

3 回答 3

48

除了 '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
于 2009-07-13T21:36:00.173 回答
12

git gui将允许您提交单行,即使它们被您不想提交的其他修改行包围。

于 2009-07-14T06:57:29.907 回答
0

在 Git 2.25(2020 年第一季度)中,将“ git-add--interactive” Perl 脚本移至 C 的工作仍在继续。

结果,大块拆分功能(使用“ s”键访问的功能)将发生变化。

请参阅提交2E40831提交54D9D9B提交ADE246E提交D6CF873COMMIS 9254BDFCOMMIT BCDD297COMMIT 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 版本的大块头的频繁格式化/重新解析。

于 2019-12-29T21:16:17.783 回答