git add -p
命令允许交互式地暂存文件的部分(详情请参见 https://git-scm.com/book/zh/v2/Git-工具-交互式暂存)。有没有一种非交互式地暂存部分内容的方式?例如,我有这些部分内容:
$ git diff
diff --git a/test.txt b/test.txt
index 77e67ac..34eabb1 100644
--- a/test.txt
+++ b/test.txt
@@ -1,4 +1,4 @@
-this is the first change
+this is the first change, don't stage it!
@@ -6,5 +6,5 @@ this is the first change
-this is the first change
+this is the second change, stage it!
希望有一个单一的命令可以像这样运行:
git add -p 2
,以便可以在不经过交互式菜单的情况下暂存第二个补丁。注意:这里提到了一个解决方案(How to stage chunks non-interactively in git?),但它涉及多个命令和编辑补丁文件的额外步骤。
何时使用这个功能?例如我正在编辑一个长而重复的JSON文件,在运行
git diff
后,我知道我想要将每个其他补丁暂存。我不想逐个浏览每个补丁;我只想告诉git“暂存第2、4、6、8等补丁”。这也可以在尝试与Sourcetree(它启用了对补丁的处理)互动时使用自定义脚本时非常有用。
git diff
输出后,我想要暂存每个其他块。因此,我已经通过运行git diff
进行了“交互”,但现在我只想一次性地暂存一堆块,而不是逐个浏览它们。 - Ben Cook