有时同时改了两个功能A和B,并且都没有提交,这两个功能涉及到了同一个文件a,都进行了修改,但在某次提交中只希望提交功能A,所以只能提交文件a的关于功能A的部分修改,我们可以使用下面的命令对文件a进行选择性提交:
git add --patch <filename>
或其简短模式:
git add -p <filename>
执行此命令后,Git将开启一个交互式模式,它会将文件a分解成它认为合理的“块(hunk)”(文件的一部分),并和你分别确认如何处理每处的修改:
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