当我对Git中的文件进行更改时,如何才能只提交部分更改?

例如,如何在文件中更改的30行中只提交15行?


当前回答

如果你碰巧在使用VS代码,那你就幸运了。选择要暂存的范围,然后使用Git:Sstage Selected Ranges暂存它们,如果需要,请提交。

我录制了一张gif图来演示我的意思:

其他回答

如果是在Windows平台上,我认为gitgui是一个很好的工具,可以从未分页的文件中暂存/提交几行代码

1.愚蠢:

从未标记的更改部分选择文件右键单击需要暂存的代码块选择要提交的阶段Hunk

2.逐行:

从未标记的更改部分选择文件选择要暂存的行右键单击并选择要提交的阶段行

3.如果您想暂存除几行之外的完整文件:

从未标记的更改部分选择文件按Ctrl+T(要提交的阶段文件)所选文件现在移动到分段更改部分选择要暂存的行右键单击并选择UnStage Lines进行提交

对于emacs,还有gitsum

您可以使用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一样直接编辑暂存区域

对于使用Git扩展的用户:

在提交窗口中,选择要部分提交的文件,然后在右窗格中选择要提交的文本,然后右键单击所选内容并从上下文菜单中选择“暂存选定行”。

我强烈建议使用Atlassian的SourceTree。(这是免费的。)这让事情变得微不足道。您可以快速轻松地分段单个大块代码或单个代码行。