在Git中仅提交文件部分更改

11 浏览
0 Comments

在Git中仅提交文件部分更改

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

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

admin 更改状态以发布 2023年5月21日
0
0 Comments

你可以使用git add --interactivegit add -p ,然后使用git commit(而不是git commit -a);请参考git-add手册中的交互模式,或者简单地按照指示操作。

现代Git也有git commit --interactive(和git commit --patch,它是交互式提交中的修补程序选项的快捷方式)。

如果您更喜欢从GUI中进行操作,则可以使用git-gui。您只需右键单击标记要包含在提交中的块,然后选择:

Stage Hunk For Commit

如果您想添加块的特定行,则还可以选择要添加的行,然后右键单击它们并选择:

Stage Lines For Commit

enter image description here

我个人发现使用git add -i比较容易。其他Git GUI,例如QGit或GitX,也可能具有此功能。

0
0 Comments

你可以使用:

git add --patch 

或者简短的:

git add -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 手动编辑当前块
    • 然后,您可以通过将+/-替换为#来手动编辑块(感谢veksen
  • ? 打印块帮助

如果文件尚未在存储库中,您可以先执行git add -N 。之后可以继续使用git add -p

之后,您可以使用:

  • git diff --staged检查您是否暂存了正确的更改
  • git reset -p取消暂存错误添加的块
  • git commit -v 在编辑提交消息时查看提交记录。

请注意,这与git format-patch命令远不相同,其目的是将提交数据解析为.patch文件。

参考资料: Git工具-交互式暂存

0