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

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


当前回答

gitgui在diff视图下提供了此功能。只需右键单击您感兴趣的行,就会看到一个“stage this line to commit”菜单项。

其他回答

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

这样地:

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

从2018年答案的评论来看:

很遗憾,Visual Studio没有此选项。大约10年前,替代源代码控制系统Mercurial在Visual Studio中支持此功能。自从我使用Git以来,我真的很怀念它。

现在(2022年8月)支持:

Git Line登台发布!我们很高兴地宣布在Visual Studio 2022中发布Line登台支持。行分段,也称为交互式分段,使您能够在不同的提交中拆分更改的代码行。在提交更改之前,还可以使用行分段来检查更改。将更改后的代码行或代码段标记为通过分段进行审查,并在完成后提交分段的更改。通过将Visual Studio 2022更新到17.3版或更高版本,开始使用Line staging。阅读我们的Line登台文档,了解有关如何使用和自定义此功能的更多信息。

git meld索引--引用自网站:

git-meld-index运行meld——或任何其他gitdifftool(kdiff3、diffuse等)——允许您以交互方式将更改转移到git索引(也称为git暂存区)。

这与git add-p和git add-interactive的功能类似。在某些情况下,meld比gitadd-p更容易/更快使用。这是因为meld允许你,例如:

查看更多上下文参见行内差异手动编辑并查看“实时”差异更新(每次按键后更新)导航到更改,而不必对要跳过的每个更改说“n”

用法

在git存储库中,运行:

git meld-index

您将看到meld(或您配置的gitdifftool)弹出:

左:从工作树复制的临时目录连续文件

RIGHT:包含索引内容的临时目录。这还包括尚未在索引中但在工作副本中已修改或未跟踪的文件——在本例中,您将从HEAD中看到文件内容。

编辑索引(右手边)直到满意。记得在需要时保存。

完成后,关闭meld,git meld索引将更新索引,以匹配刚刚编辑的meld右侧临时目录的内容。

git-cola是一个很棒的GUI,并且内置了这个功能。只需选择要分段的行,然后按S。如果没有选择,则将分段完整的大块。

尝试了gitadd-p filename.x,但在mac上,我找到了gitx(http://gitx.frim.nl/或https://github.com/pieter/gitx)让我更容易地完成我想要的任务。