当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
我强烈建议使用Atlassian的SourceTree。(这是免费的。)这让事情变得微不足道。您可以快速轻松地分段单个大块代码或单个代码行。
其他回答
gitgui在diff视图下提供了此功能。只需右键单击您感兴趣的行,就会看到一个“stage this line to commit”菜单项。
您可以使用gitadd--interactive或gitadd-p<file>,然后使用gitcommit(而不是gitcommit-a);请参阅gitadd手册页中的交互模式,或简单地按照说明进行操作。
现代Git还提供了gitcommit——交互式(和gitcommit补丁,这是交互式提交中补丁选项的快捷方式)。
如果您喜欢从GUI执行,可以使用gitgui。通过右键单击并选择以下选项,您可以简单地标记要包含在提交中的块:
为提交准备Hunk
如果您只想添加大块的某些行,也可以选择所需的行,右键单击它们,然后:
提交的暂存行
我个人觉得这比使用git add-I更容易。其他git GUI,如Qbit或GitX,也可能具有此功能。
IntelliJ IDEA(以及我猜该系列的所有其他产品)自2018.1版起就内置了对部分提交的支持。
我相信git add-e myfile是最简单的方法(至少是我的首选),因为它只需打开一个文本编辑器,让您选择要暂存的行和不暂存的行。关于编辑命令:
添加的内容:
添加的内容由以“+”开头的行表示。您可以通过删除添加行来防止暂存任何添加行。
删除的内容:
删除的内容由以“-”开头的行表示。通过将“-”转换为“”(空格),可以防止临时删除它们。
修改内容:
修改后的内容由“-”行(删除旧内容)和“+”行(添加替换内容)表示。您可以通过将“-”行转换为“”并删除“+”来防止暂存修改线请注意,仅修改其中的一半可能会对索引带来混乱的变化。
git-add的所有细节都可以在git-help-add上找到
您可以使用EclipseIDE,每个修改的本地文件都可以与暂存区域进行比较,在这个并排的diff视图中,您可以自由选择从本地复制到暂存区域的大块,或者相反,从暂存区域回滚本地更改。
但还有更多:),所有图形化的git客户端都会做大块分段(gitadd-p),但我知道没有人能做到这一点:直接在分段区域进行编辑,这样就可以更精细地拾取同一行或同一大块上的多个更改(甚至可以写入/删除/更新本地从未存在的内容),就像“gitadd-e”在补丁级别工作,但没有破坏补丁内容的风险。此外,由于它在diff视图中使用了常规文本编辑器,因此您可以使用语法颜色来帮助您,并且可以执行文本替换操作(更改所有缩进类型、重命名在许多地方使用的本地变量等),以便在提交“真正”更改之前开始单独提交一些重新格式化/重构,但不需要在同一提交中嵌入所有文件更改。
当然,Eclipse更面向Java,但由于其强大的gitstaging编辑器,它也可以用于其他语言。有一个基于Eclipse的免费产品,只关注git操作,名为GitEye:https://www.collab.net/downloads/giteye但使用基本的Eclipse发行版似乎维护得不太好,比如:https://www.eclipse.org/downloads/packages/release/2020-12/r/eclipse-ide-java-developers
编辑:由于IntelliJ 2020.3允许使用真正的git索引,因此现在可以像Eclipse一样直接编辑暂存区域