当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
我相信git add-e myfile是最简单的方法(至少是我的首选),因为它只需打开一个文本编辑器,让您选择要暂存的行和不暂存的行。关于编辑命令:
添加的内容:
添加的内容由以“+”开头的行表示。您可以通过删除添加行来防止暂存任何添加行。
删除的内容:
删除的内容由以“-”开头的行表示。通过将“-”转换为“”(空格),可以防止临时删除它们。
修改内容:
修改后的内容由“-”行(删除旧内容)和“+”行(添加替换内容)表示。您可以通过将“-”行转换为“”并删除“+”来防止暂存修改线请注意,仅修改其中的一半可能会对索引带来混乱的变化。
git-add的所有细节都可以在git-help-add上找到
其他回答
您可以使用gitadd--interactive或gitadd-p<file>,然后使用gitcommit(而不是gitcommit-a);请参阅gitadd手册页中的交互模式,或简单地按照说明进行操作。
现代Git还提供了gitcommit——交互式(和gitcommit补丁,这是交互式提交中补丁选项的快捷方式)。
如果您喜欢从GUI执行,可以使用gitgui。通过右键单击并选择以下选项,您可以简单地标记要包含在提交中的块:
为提交准备Hunk
如果您只想添加大块的某些行,也可以选择所需的行,右键单击它们,然后:
提交的暂存行
我个人觉得这比使用git add-I更容易。其他git GUI,如Qbit或GitX,也可能具有此功能。
如果是在Windows平台上,我认为gitgui是一个很好的工具,可以从未分页的文件中暂存/提交几行代码
1.愚蠢:
从未标记的更改部分选择文件右键单击需要暂存的代码块选择要提交的阶段Hunk
2.逐行:
从未标记的更改部分选择文件选择要暂存的行右键单击并选择要提交的阶段行
3.如果您想暂存除几行之外的完整文件:
从未标记的更改部分选择文件按Ctrl+T(要提交的阶段文件)所选文件现在移动到分段更改部分选择要暂存的行右键单击并选择UnStage Lines进行提交
如果你正在使用vim,你可能想尝试一个叫做逃犯的优秀插件。
您可以使用:Gdiff查看文件在工作副本和索引之间的差异,然后使用经典的vim diff命令(如dp)将行或块添加到索引中。将修改保存在索引中,并使用:Gcommit提交,就完成了。
这里有非常好的介绍性放映(特别是第2部分)。
我相信git add-e myfile是最简单的方法(至少是我的首选),因为它只需打开一个文本编辑器,让您选择要暂存的行和不暂存的行。关于编辑命令:
添加的内容:
添加的内容由以“+”开头的行表示。您可以通过删除添加行来防止暂存任何添加行。
删除的内容:
删除的内容由以“-”开头的行表示。通过将“-”转换为“”(空格),可以防止临时删除它们。
修改内容:
修改后的内容由“-”行(删除旧内容)和“+”行(添加替换内容)表示。您可以通过将“-”行转换为“”并删除“+”来防止暂存修改线请注意,仅修改其中的一半可能会对索引带来混乱的变化。
git-add的所有细节都可以在git-help-add上找到
这个问题已经问了10年了。我希望这个答案对某人有用。正如这里的答案中所提到的,在GUI不是选项的情况下,AndrejShadura的gitcrecord工具有助于提供一个交互式窗口,我们可以在其中选择要提交的行。
按如下方式设置扩展:
git clone https://github.com/andrewshadura/git-crecord
cd git-crecord
./setup.py install
ln -s $PWD/git-crecord ~/.local/bin/git-crecord
cd到git repo并按如下方式调用它:
git crecord
这将带来一个交互式界面,可以使用如下所示。按下以下键将执行某些操作:
f hunk toggle fold (arrow keys can also be used)
space toggle hunk selection
a toggle commit or amend
c confirm and open commit window
显示示例用法的屏幕广播