当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
这个问题已经问了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
显示示例用法的屏幕广播
其他回答
我强烈建议使用Atlassian的SourceTree。(这是免费的。)这让事情变得微不足道。您可以快速轻松地分段单个大块代码或单个代码行。
您可以使用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一样直接编辑暂存区域
在所有这些工具中,我最喜欢Fork(虽然不是免费的)!
与其他游戏相比,它使用起来非常时尚优雅,单击鼠标旁边的按钮可以进行大块或线条分段。
另一个选择是GitKraken,有趣但更复杂和强大!
对于Atom用户,包github包括gitgui风格的交互式登台。有关快捷方式,请参阅软件包的文档。
使用Atom可以处理具有深色背景的主题(默认情况下,gitgui具有白色背景)。
值得注意的是,要为新文件使用git-add--patch,您需要首先使用git-add--intent添加文件到索引:
git add -N file
git add -p file