介绍
在这个实验中,你将学习如何检查 Git 储藏 (stash) 的内容,以确定它是否包含特定的更改。我们将从在一个示例仓库中进行一些更改并将其储藏开始。
然后,你将使用 git stash show -p 命令查看最近一次储藏的详细差异 (diff),这样你就能看到添加、删除或修改的确切行。最后,你将探索如何检查多个储藏,以找到你正在寻找的更改。
在这个实验中,你将学习如何检查 Git 储藏 (stash) 的内容,以确定它是否包含特定的更改。我们将从在一个示例仓库中进行一些更改并将其储藏开始。
然后,你将使用 git stash show -p 命令查看最近一次储藏的详细差异 (diff),这样你就能看到添加、删除或修改的确切行。最后,你将探索如何检查多个储藏,以找到你正在寻找的更改。
在这一步中,你将学习如何检查 Git 储藏 (stash) 中保存的更改。当你使用 git stash 时,Git 会保存你未提交的更改。若要确切查看保存的内容,你可以使用 git stash show 命令。
首先,让我们对 my-time-machine 仓库中的一个文件进行一些更改。如果你还未在该目录下,请导航回到该目录:
cd ~/project/my-time-machine
现在,让我们向 message.txt 文件中添加一些新内容。我们将使用带有 >> 的 echo 命令将内容追加到文件中,这样就不会覆盖现有的内容。
echo "Adding a new line for stashing." >> message.txt
你可以使用 cat 命令验证文件的内容:
cat message.txt
你应该会看到原始行和新行:
Hello, Future Me
Adding a new line for stashing.
现在,让我们将这些更改储藏起来。请记住,储藏操作会保存你未提交的更改,这样你就可以去处理其他事情,之后再回来处理这些更改。
git stash save "Added a line for stashing demo"
你应该会看到表明更改已保存的输出:
Saved working tree and index state On branch master: Added a line for stashing demo
现在更改已被储藏,让我们使用 git stash show 来查看储藏中的内容。
git stash show
这个命令会为你提供最近一次储藏中更改的摘要。你可能会看到类似这样的输出:
message.txt | 1 +
1 file changed, 1 insertion(+)
这表明有一个文件 (message.txt) 被更改,并且有一处插入(新增了一行)。
若要查看更改的实际内容,我们需要添加 -p 标志(代表补丁)。这将像 git diff 一样显示差异。
git stash show -p
这个命令将显示储藏的更改中添加、删除或修改的确切行。输出将类似于标准的 Git 差异:
diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
Hello, Future Me
+Adding a new line for stashing.
以 + 开头的行表示新增内容。在这个例子中,我们添加了 "Adding a new line for stashing." 这一行。
在决定应用或丢弃一个储藏之前,使用 git stash show -p 对于理解储藏中的内容至关重要。它能帮助你确认储藏中包含你期望的更改。
在上一步中,我们使用 git stash show -p 查看了储藏中的更改。有时,差异输出可能会很长,特别是在大型项目中。在这种情况下,你可能想在储藏差异中搜索特定的更改。
Git 的差异输出只是文本,因此你可以将其通过管道传递给标准的 Linux 命令行工具,如 grep,以搜索特定模式。
让我们尝试搜索上一步中添加的行:"Adding a new line for stashing."
确保你仍然在 ~/project/my-time-machine 目录中。
cd ~/project/my-time-machine
现在,运行 git stash show -p 命令,并将其输出通过管道传递给 grep。我们将搜索 "stashing" 这个词。
git stash show -p | grep "stashing"
你应该会在差异输出中看到包含 "stashing" 这个词的行:
+Adding a new line for stashing.
这展示了你如何使用 grep 过滤 git stash show -p 的输出,并在储藏的更改中找到特定的行或模式。
你可以使用 grep 的任何选项来优化搜索。例如,你可以使用 -i 进行不区分大小写的搜索,或者使用 -C 来显示匹配项周围的上下文行。
能够搜索储藏差异是一项强大的技术,特别是当你有多个储藏或大型储藏时。它可以帮助你快速定位你感兴趣的更改,而无需手动滚动查看整个差异输出。
在实际场景中,你可能需要多次储藏更改。Git 允许你有多个储藏,并且它们以栈的形式进行管理。最新的储藏位于栈顶,称为 stash@{0}。较旧的储藏依次为 stash@{1}、stash@{2} 等等。
让我们创建另一组更改并将其储藏起来,看看这是如何工作的。
首先,确保你位于 ~/project/my-time-machine 目录中。
cd ~/project/my-time-machine
现在,让我们向 message.txt 添加不同的一行:
echo "Adding a second line for another stash." >> message.txt
验证内容:
cat message.txt
现在你应该看到三行内容:
Hello, Future Me
Adding a new line for stashing.
Adding a second line for another stash.
现在,将这些新更改进行储藏:
git stash save "Added a second line for stashing demo"
你应该会看到表明新储藏的输出:
Saved working tree and index state On branch master: Added a second line for stashing demo
要查看你拥有的储藏列表,请使用 git stash list 命令:
git stash list
你应该会看到类似如下的内容:
stash@{0}: On master: Added a second line for stashing demo
stash@{1}: On master: Added a line for stashing demo
注意,最新的储藏("Added a second line...")是 stash@{0},而前一个储藏("Added a line...")是 stash@{1}。
你可以将 git stash show -p 与储藏标识符一起使用,以查看特定储藏的内容。例如,要查看我们创建的第一个储藏(stash@{1}):
git stash show -p stash@{1}
这将显示 stash@{1} 中更改的差异:
diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
Hello, Future Me
+Adding a new line for stashing.
而要查看最新的储藏(stash@{0}):
git stash show -p stash@{0}
这将显示 stash@{0} 中更改的差异:
diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -2 +2,2 @@
Adding a new line for stashing.
+Adding a second line for another stash.
当你同时处理不同的任务或实验时,能够管理多个储藏并单独检查它们的内容非常有用。
在本次实验中,我们学习了如何使用 git stash show 命令检查 Git 储藏的内容。首先,我们对一个文件进行了更改,然后使用 git stash save 并附带描述性信息将这些更改进行了储藏。接着,我们使用 git stash show 来获取更改的摘要,更重要的是,使用 git stash show -p 查看储藏更改的详细差异,这样我们就能看到具体添加或修改的行。
在后续步骤中(提供的内容未详细说明),可能会涉及在储藏差异中搜索特定更改,以及测试多个储藏,以了解如何检查栈中的不同储藏。在应用或丢弃一个储藏之前,这个过程对于验证储藏是否包含预期的修改至关重要。