Logo
Section 1 / 7

暂存工作目录

学习如何临时保存未提交的更改,以便在切换分支时不会丢失工作。

导入

暂存工作目录

学习如何临时保存未提交的更改,以便在切换分支时不会丢失工作。

在 Git 中,根据不同的场景,我们有多种撤销操作方式。具体使用哪种方法取决于我们的需求。以下是需要执行撤销操作的几种常见场景:

  • 修改最后一次提交。
  • 重置多个提交。
  • 推送到远程分支后撤销更改。
  • 将提交重新基底到另一个提交。

有时,在切换到新分支之前,我们可能已经开始修改代码。例如,假设我们当前在 master 或 development 分支上,并且工作目录是干净的。此时,我们对某个代码文件进行了修改,随后意识到需要为这个改动创建一个新的功能分支。

git stash 命令

我们可以使用 git stash 来临时保存当前的未提交更改。

1$ git stash

该命令会保存当前未提交的更改状态,使工作目录恢复为干净状态。

现在,我们可以创建一个新分支:

1$ git checkout -b new_feature_branch

在新分支中,可以通过 git stash pop 恢复之前保存的状态。

1$ git stash pop

暂存的意义

暂存(Stash)允许我们将正在进行的工作暂时保存,从而清理工作目录。这使得我们可以在不提交的情况下保存更改并切换分支。

注意: 请注意,Git 允许我们在不同分支之间推送和弹出暂存内容。但若将暂存的内容弹回一个并非原始提交的分支,可能会造成混淆。

下面我们通过一个示例来说明:我们对某个文件进行了一些修改,然后切换到 master 分支处理其他任务。在这种情况下,我们会先将更改暂存,等返回后再恢复。

示例

首先,创建一个名为 New_Branch 的新分支,对文件进行一些修改并提交。

我们在终端中执行以下命令:

1$ git checkout -b New_Branch 2$ echo "First Change" >> file1.txt 3$ git add file1.txt 4$ git commit -m "Commit in New Branch"

在完成更多修改后,假设我们需要切换到 master 分支。由于这些更改仍在进行中,无法直接提交。因此我们使用 git stash。在下面的命令中,借助 git diff 可以查看最近的修改内容。运行 git status 后,可以看到所有上次提交之后的更改已消失,工作目录已变得干净。

1$ echo "Changes currently in progress" >> file1.txt 2$ git diff 3$ git stash 4$ git status

接下来,切换到 master 分支,完成所需工作,再回到 New_Branch。

1$ git checkout master 2$ git checkout New_Branch

尝试使用 cat file1.txt 查看文件内容。此时,未保存的更改已经不存在。

现在运行以下命令:

1$ git stash pop

再次运行 git status 命令,确认状态已恢复。同时,使用 cat 命令可以查看 file1.txt 中的更改内容。

1$ git status 2$ cat file1.txt
  1. 在完成更多修改后,使用 git stash:

    1$ echo "Changes currently in progress" >> file1.txt 2$ git diff 3$ git stash 4$ git status
  2. 切换到 master 分支,再回到 New_Branch:

    1$ git checkout master 2$ git checkout New_Branch
  3. 执行以下命令:

    1$ git stash pop
  4. 再次运行 git status,并通过 cat 命令查看 file1.txt 中的更改:

    1$ git status 2$ cat file1.txt
Terminal

file1.txt git init git add . git commit -m "First Commit" clear git checkout -b New_Branch echo "First Change" >> file1.txt git add file1.txt git commit -m "Commit in New Branch"" mode="edit">

处理冲突

git reset 命令