有时同时改了两个功能A和B,并且都没有提交,这两个功能涉及到了同一个文件a,都进行了修改,但在某次提交中只希望提交功能A,所以只能提交文件a的关于功能A的部分修改,我们可以使用下面的命令对文件a进行选择性提交:1
git add --patch <filename>
或其简短模式:1
git add -p <filename>
执行此命令后,Git将开启一个交互式模式,它会将文件a分解成它认为合理的“块(hunk)”(文件的一部分),并和你分别确认如何处理每处的修改:1
Stage this hunk [y,n,a,d,g,/,j,J,k,K,s,e,?]?
以下是每个选项的说明:
y暂存该块n不暂存该块a暂存该块及该文件中的剩余所有块d不暂存该块及该文件中的剩余所有块g选择并跳转至指定块块/搜索与给定的正则表达式匹配的块j离开当前未定的块,处理下一个未定的块J离开当前未定的块,处理下一个块k离开当前未定的块,处理上一个未定的块K离开当前未定的块,处理上一个块s将当前的大块分成更小的块e手动编辑当前的块?打印帮助
如果该文件尚未存储在存储库中,则可以先执行 git add -N <filename>。之后你可以继续 git add -p <filename>。
之后,您可以使用:
git diff --staged检查暂存的修改是否正确git reset -p撤销暂存的错误修改git commit -v在编辑提交消息时查看您的提交
注意这与 git format-patch 命令差别很大,git format-patch 是将提交数据解析为 .patch 文件。
备查:https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging
stackoverflow原文:https://stackoverflow.com/a/1085191