当我在 Git 中修改一个文件时,如何只提交其中的一部分更改?
例如,如果我在文件中修改了 30 行,我只想提交其中的 15 行,应该怎么办呢?
当我在 Git 中修改一个文件时,如何只提交其中的一部分更改?
例如,如果我在文件中修改了 30 行,我只想提交其中的 15 行,应该怎么办呢?
根据2018年的答案评论:
可惜Visual Studio没有这个选项。
大约10年前,替代源代码控制系统Mercurial在Visual Studio内支持了这个功能。自从使用Git以来,我真的很想念它。
现在(2022年8月)已经支持:
Git Line-staging 已发布!
我们很高兴地宣布,在Visual Studio 2022中支持Line-staging。
Line-staging,即交互式暂存,使您可以将更改的行拆分为不同的提交。
Line-staging还可以在提交更改之前用于审查更改。通过将更改的行或代码部分标记为已审核,对其进行暂存并在完成后提交您的已暂存更改。通过将Visual Studio 2022更新到17.3或更高版本,开始使用Line-staging。
阅读我们的Line-staging文档,了解更多有关如何使用和自定义此功能的信息。
git gui
是一个非常好的工具,可以从未暂存的更改
文件中选择并提交几行代码。
1. 按块提交:
未暂存的更改
部分选择文件提交块以进行提交
未暂存的更改
部分选择文件提交行以进行提交
未暂存的更改
部分选择文件Ctrl+T(将文件暂存到提交)
已暂存的更改
部分取消暂存行以进行提交
我想将lazygit添加到工具列表中。它是一个漂亮的命令行GUI(即使不允许X转发,也可以通过ssh工作)。它具有广泛的功能(例如,选择要提交的行,交互式重置),有用的着色,并且相对简单易用。可以通过多种方式安装(go、conda、软件包管理器等)。目前仍在积极开发/维护。
正如上面的一个回答所示,您可以使用以下命令进行操作:
完整命令:
git add --patch filename.txt
简写命令:
git add -p filename.txt
... 但是对于已经存在于您的代码库中的文件,建议您直接在提交命令中使用--patch标志(如果您正在使用足够新的git版本):
git commit --patch filename.txt
... 或者,再次使用简写命令:
git commit -p filename.txt
... 然后使用上述键(y/n等)选择要包含在提交中的行。
git add -p filename.txt
”相比,这给你带来了什么好处?如果您弄错了部分文件更改,则撤消添加比撤消提交更好。 - CTMacUsergit-meld-index -- 引用自该网站:
git-meld-index 运行 meld 或任何其他 git difftool(kdiff3、diffuse 等),允许您交互式地将更改暂存到 git index(也称为 git staging area)。
这类似于 git add -p 和 git add --interactive 的功能。在某些情况下,meld 比 git add -p 更易于使用/更快。这是因为 meld 允许您,例如:
用法
在 git 存储库中运行:
git meld-index
当然,Eclipse更加偏向于Java,但是由于其强大的git暂存编辑器,它也可以用于其他语言。有一个基于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 gui
=git add -e
>git add -i -p
;就方便性而言:git gui
>git add -i -p
>git add -e
。因此:当您可以访问X时,请选择git gui
。对于简单的东西和当您没有或不想使用X时,请选择git add -i -p
。对于复杂的暂存操作而无需X,请选择git add -e
。 - Penghe Geng