一尘不染

在 Git 中只提交文件的一部分

git

当我在 Git 中对文件进行更改时,如何仅提交部分更改?

例如,我如何才能只提交文件中已更改的 30 行中的 15 行?


阅读 159

收藏
2022-01-21

共1个答案

一尘不染

您可以使用git add --patch <filename>(或-p简称),git 将开始将您的文件分解成它认为合理的“大块”(文件的一部分)。然后它会提示你这个问题:

Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?

以下是每个选项的说明:

  • y 为下一次提交暂存这个大块

  • n 不要为下一次提交暂存这个大块

  • q退出; 不要上演这个帅哥或任何剩余的帅哥

  • 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命令大不相同,命令的目的是将提交数据解析为.patch文件。

2022-01-21