git stash恢复指定
什么是git stash?
在使用git进行版本控制的过程中,我们经常需要切换分支来处理其他任务或解决bug。但当我们在一个分支上工作到一半,需要切换分支时,就会面临一个问题:如何保留我们在这个分支上的修改,又能够切换到其他分支上继续工作?
这时候,git stash就能派上用场了。git stash可以将未提交的修改保存起来,并将工作目录恢复到干净的状态,以便我们可以切换到其他分支去工作。待我们需要再次回到这个分支时,可以通过git stash恢复之前保存的修改。
git stash的基本用法
git stash的基本用法非常简单,一共只有三个命令:
git stash
:将未提交的修改保存到stash中;git stash list
:显示当前stash列表;git stash apply
:将stash中的修改恢复到当前工作目录。
下面来分别详细介绍这三个命令的用法。
git stash
git stash
命令可以将你在当前分支上的所有未提交的修改保存到stash中,使得你的工作目录变干净,以便你可以切换到其他分支去工作。
使用方法很简单,只需要在命令行中输入git stash
即可:
$ git stash
Saved working directory and index state WIP on master: 3a78e57 Add feature A
上述命令执行完成后,git就会将你的修改保存到一个临时的stash中,并删除这些修改,使得你的工作目录变干净。同时,git还会输出一条stash的信息,包括stash的名称(stash名称会自动生成,格式为stash@{n}
)以及stash的描述信息。
git stash list
git stash list
命令用于列出当前分支上所有的stash。
使用方法很简单,只需要在命令行中输入git stash list
即可:
$ git stash list
stash@{0}: WIP on master: 3a78e57 Add feature A
stash@{1}: WIP on master: 9b49d53 Fix bug B
上述命令的输出中,每一行对应一个stash,stash的名称和描述信息与使用git stash
命令时的输出信息相同。
git stash apply
git stash apply
命令用于将stash中的修改恢复到当前工作目录。
使用方法很简单,只需要在命令行中输入git stash apply
加上要恢复的stash的名称即可:
$ git stash apply stash@{1}
上述命令执行后,git会将stash@{1}中的修改应用到当前的工作目录中。这时,你又可以继续在当前分支上进行开发工作了。
需要注意的是,git stash apply
命令只会将stash中的修改应用到工作目录,但不会从stash中删除这个stash。如果你希望在应用stash的同时将其从stash列表中删除,可以使用git stash pop
命令:
$ git stash pop stash@{1}
上述命令将stash@{1}中的修改应用到当前的工作目录中,并从stash列表中删除。
git stash恢复指定的stash
默认情况下,git stash apply
命令会将最近一次保存的stash应用到当前工作目录中。但有时候,你可能只希望恢复指定的stash,而不是最近一次的stash。git stash提供了两种方式来恢复指定的stash。
1. 使用stash名称恢复
使用git stash apply
命令时,可以通过指定stash的名称来恢复指定的stash,格式为stash@{n}
,其中n为stash的索引。
例如,如果我们希望恢复stash列表中的第一个stash,可以执行以下命令:
$ git stash apply stash@{0}
2. 使用stash的唯一标识符恢复
除了使用stash名称,还可以使用stash的唯一标识符来恢复指定的stash。stash的唯一标识符由git生成,每次执行git stash
命令时都会自动生成一个。
使用git stash apply
命令时,可以通过指定stash的唯一标识符来恢复指定的stash。
首先,使用git stash list
命令查看stash的列表,并找到你希望恢复的stash对应的标识符。然后,执行以下命令来恢复该stash:
$ git stash apply <stash_id>
其中,<stash_id>
是stash的唯一标识符。
示例
下面通过一个示例来演示git stash恢复指定的stash。
假设我们在分支featureA上进行开发,已经提交了一部分修改,并执行了git stash
命令保存了未提交的修改。
$ git stash
Saved working directory and index state WIP on featureA: 123abc Add feature A
然后,我们又在featureA分支上做了一些新的修改,但还没有提交。
此时,我们希望将之前保存在stash中的修改恢复到当前工作目录中。
首先,使用git stash list
命令查看stash的列表。
$ git stash list
stash@{0}: WIP on featureA: 123abc Add feature A
stash@{1}: WIP on featureA: 456def Fix bug B
stash@{2}: WIP on featureA: 789ghi Refactor code C
可以看到,我们一共保存了三个stash,我们希望恢复第二个stash。
执行以下命令,将stash@{1}中的修改应用到当前的工作目录中:
$ git stash apply stash@{1}
git会将stash@{1}中的修改应用到当前的工作目录中。
$ git status
On branch featureA
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: fileB.txt
modified: fileC.txt
modified: fileD.txt
no changes added to commit (use "git add" and/or "git commit -a")
可以看到,stash@{1}中的修改已经恢复到了当前工作目录中。
总结
git stash是一个非常有用的命令,能够帮助我们在切换分支时保存未提交的修改,并在需要时恢复这些修改。