当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
git-cola是一个很棒的GUI,并且内置了这个功能。只需选择要分段的行,然后按S。如果没有选择,则将分段完整的大块。
其他回答
如果你正在使用vim,你可能想尝试一个叫做逃犯的优秀插件。
您可以使用:Gdiff查看文件在工作副本和索引之间的差异,然后使用经典的vim diff命令(如dp)将行或块添加到索引中。将修改保存在索引中,并使用:Gcommit提交,就完成了。
这里有非常好的介绍性放映(特别是第2部分)。
当我有很多更改,并且最终将根据这些更改创建一些提交时,我希望在暂存之前暂时保存我的起点。
这样地:
$ 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的回答是我通常会做的,但有时会有很多变化,我可以告诉你,我可能会在表演过程中犯错误,我想要一个可以依靠第二次传球的坚定状态。
IntelliJ IDEA(以及我猜该系列的所有其他产品)自2018.1版起就内置了对部分提交的支持。
在所有这些工具中,我最喜欢Fork(虽然不是免费的)!
与其他游戏相比,它使用起来非常时尚优雅,单击鼠标旁边的按钮可以进行大块或线条分段。
另一个选择是GitKraken,有趣但更复杂和强大!
您可以使用:
git add --patch <filename>
或简称:
git add -p <filename>
Git会将你的文件分解成它认为合理的“大块”(文件的一部分)。然后,它将提示您以下问题:
Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?
以下是每个选项的描述:
你准备好下一个任务不要为下一次提交准备这个大块q退出;不要表演这个大块头或任何剩余的大块头将这个大块和所有后续大块放在文件中不要在文件中放置这个大块或任何后面的大块选择一个帅哥/搜索与给定正则表达式匹配的大块j让这个男人还没决定,看看下一个还没决定的男人J让这个男人犹豫不决,看看下一个男人让这个男人还没决定,看看之前那个还没决定的男人K让这个男人犹豫不决,看看上一个男人我们把现在的大块分成更小的大块e手动编辑当前大块然后,您可以通过用#替换+/-来手动编辑大块(谢谢veksen)? 打印大块帮助
如果文件还不在存储库中,可以先执行gitadd-N<filename>。然后,您可以继续使用gitadd-p<filename>。
之后,您可以使用:
gitdiff—暂存以检查是否暂存了正确的更改git重置-p以取消页面错误添加的大块gitcommit-v在编辑提交消息时查看提交。
注意,这与git格式补丁命令有很大不同,后者的目的是将提交数据解析为.patch文件。
未来参考:Git工具-交互式暂存