交互式暂存

大约 3 分钟

# 共同暂存

当希望替换能替换为多个提交而不是替代在一起成为一个提交,几个临时的 Git 命令可以帮助将文件的特定部分组合成提交。

如果运行 git add 时使用 -i 或者 --interactive 选项,Git 将会进入一个交互终端模式,显示类似下面的东西:

$ git add -i
staged     unstaged path
1:        +1/-0      nothing 12.txt
2:        +0/-0      nothing 新建文本文档.txt
*** Commands ***
1: status       2: update       3: revert       4: add untracked
5: patch        6: diff         7: quit         8: help!

在这块区域后是“Commands”命令区域。在这里你可以做一些工作,包括暂存文件、取消暂存文件、暂存文件的一部分、添加未被追踪的文件、显示暂存内容的区别。

# 暂存与取消暂存条件

如果在 What now> 将来后键入 u 或 2(更新),它会问你想要暂存其中文件。

输入要暂存文件前的数字,例如:

*** Commands ***
1: status       2: update       3: revert       4: add untracked
5: patch        6: diff         7: quit         8: help
What now> u
staged     unstaged path
1:        +1/-0        +5/-1 新建文本文档.txt
Update>> 1
staged     unstaged path
* 1:        +1/-0        +5/-1 新建文本文档.txt
Update>>

文件前面的 *,意味着文件将会被暂存。

如果 Update>> 提示符不输入回车,Git 将会暂存之前选择的文件,意思是,按了回车才是将自己的文件暂存,否则将暂存之前的文件。

Update>> 1
staged     unstaged path
* 1:        +1/-0        +7/-1 新建文本文档.txt
Update>>
updated 1 path

新建文本文档.txt 还没被暂存。

如果这时想要取消暂存的文件,使用。r3(撤消)选项:

*** Commands ***
1: status       2: update       3: revert       4: add untracked
5: patch        6: diff         7: quit         8: help
What now> r
staged     unstaged path
1:        +1/-0      nothing 12.txt
2:        +7/-0      nothing 新建文本文档.txt
Revert>> 1
staged     unstaged path
* 1:        +1/-0      nothing 12.txt
2:        +7/-0      nothing 新建文本文档.txt
Revert>>

如果要查看已暂存内容的区别,可以使用 d6(区别)命令。它会显示暂存文件的一个列表,可以从中选择想要查看的暂存区别。这跟你在命令行指定 git diff --cached 非常相似:

*** Commands ***
1: status       2: update       3: revert       4: add untracked
5: patch        6: diff         7: quit         8: help
What now> d
staged     unstaged path
1:        +1/-0      nothing 12.txt
2:        +7/-0      nothing 新建文本文档.txt
Review diff>> 1
diff --git a/12.txt b/12.txt
new file mode 100644
index 0000000..509f9ed
--- /dev/null
+++ b/12.txt
@@ -0,0 +1 @@
+123s12143

# 暂存补丁

Git 暂时存文件的特定部分.

输入 p5(补丁)Git 中会询问你想要部分暂存哪些文件。然后,对已选择文件的每一个部分,它都会一个个地显示文件区别并询问你是否想要暂存他们:

\ No newline at end of file
+cdfdsfds\gucdgfafas\
+faofheaopufa0e-f\
\ No newline at end of file
Stage this hunk [y,n,q,a,d,e,?]? y

这时有很多选项。输入 ? 显示所有可以使用的命令列表:

Stage this hunk [y,n,q,a,d,e,?]? ?
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
e - manually edit the current hunk
? - print help

如果你想暂存各个区块,通常你会输入 y 或者 n,但是暂存特定文件里的全部区块链或暂时跳过对一个区块块的处理同样也很有用。

上次编辑于: 2024年5月10日 21:53