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

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


当前回答

我相信git add-e myfile是最简单的方法(至少是我的首选),因为它只需打开一个文本编辑器,让您选择要暂存的行和不暂存的行。关于编辑命令:

添加的内容:

添加的内容由以“+”开头的行表示。您可以通过删除添加行来防止暂存任何添加行。

删除的内容:

删除的内容由以“-”开头的行表示。通过将“-”转换为“”(空格),可以防止临时删除它们。

修改内容:

修改后的内容由“-”行(删除旧内容)和“+”行(添加替换内容)表示。您可以通过将“-”行转换为“”并删除“+”来防止暂存修改线请注意,仅修改其中的一半可能会对索引带来混乱的变化。

git-add的所有细节都可以在git-help-add上找到

其他回答

vim-gitgolf插件可以在不离开vim编辑器的情况下使用

:GitGutterStageHunk

除此之外,它还提供了其他很酷的功能,如一些现代IDE中的差异符号列

如果只有一部分人被安排逃亡

:Gdiff

允许视觉范围选择,然后:“<,”>diffput或:“<”>diffget暂存/还原单个行更改。

当我有很多更改,并且最终将根据这些更改创建一些提交时,我希望在暂存之前暂时保存我的起点。

这样地:

$ git stash -u
Saved working directory and index state WIP on master: 47a1413 ...
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 1st commit"
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 2nd commit"
$ git stash pop

Whymharh的回答是我通常会做的,但有时会有很多变化,我可以告诉你,我可能会在表演过程中犯错误,我想要一个可以依靠第二次传球的坚定状态。

您可以使用gitadd--interactive或gitadd-p<file>,然后使用gitcommit(而不是gitcommit-a);请参阅gitadd手册页中的交互模式,或简单地按照说明进行操作。

现代Git还提供了gitcommit——交互式(和gitcommit补丁,这是交互式提交中补丁选项的快捷方式)。

如果您喜欢从GUI执行,可以使用gitgui。通过右键单击并选择以下选项,您可以简单地标记要包含在提交中的块:

为提交准备Hunk

如果您只想添加大块的某些行,也可以选择所需的行,右键单击它们,然后:

提交的暂存行

我个人觉得这比使用git add-I更容易。其他git GUI,如Qbit或GitX,也可能具有此功能。

值得注意的是,要为新文件使用git-add--patch,您需要首先使用git-add--intent添加文件到索引:

git add -N file
git add -p file

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

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