📅  最后修改于: 2023-12-03 15:38:39.623000             🧑  作者: Mango
在我们的日常开发工作中,经常会遇到需要暂时切换到其他分支开发或者修复紧急bug的情况。但是,如果当前分支上的一些修改还没有提交,直接切换到其他分支就可能会导致代码丢失或冲突。这种情况下,我们可以使用 git stash
命令将修改的工作保存起来,以便稍后再次恢复工作现场。
下面,我将为大家介绍如何在当前分支中使用 git stash
命令。
使用 git stash
命令的基本格式如下:
git stash [save [message]]
我接下来将解释各个参数的含义和用法。
首先,我们需要在当前分支上暂存我们的修改。你可以通过以下命令来将修改保存到一个新的 stash 中:
git stash save "message"
其中,message
是一段可选的描述信息,它可以帮助你更好地理解这个 stash 的用途。如果不提供 message
参数,Git 将使用默认消息 "WIP on ..."。在同一个分支上,可以保存多个 stash,这些 stash 会形成一个栈,你可以使用 git stash list
命令查看当前栈中的 stash。
在保存当前工作现场之后,你就可以切换到其他分支去做其他工作了。如果你还没有创建需要切换到的分支,可以使用 git checkout -b branchname
这样的命令来创建和切换到新的分支。
当你需要从当前的 stash 中恢复工作现场时,可以使用以下命令:
git stash apply [stash_id]
其中 stash_id
是可选的,如果有多个 stash,你需要提供 stash 的标识符。如果你不提供 stash_id
参数,Git 将恢复最新的 stash。Git 会尝试应用最新的 stash,并将修改合并到当前分支上。但是请注意,此时可能会发生冲突,特别是当原始的修改与你在其他分支上进行的修改产生冲突时。
如果你希望恢复这个 stash 并在其应用之后从栈中删除,可以使用以下命令:
git stash pop [stash_id]
以下是一个完整的示例,演示如何在当前分支上使用 git stash
命令进行工作现场的保存和恢复:
$ git status
On branch main
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: file1.txt
modified: file2.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
newfile.txt
$ git stash save "save work in progress"
Saved working directory and index state WIP on main: cea7b37 save work in progress
$ git status
On branch main
nothing to commit, working tree clean
$ git checkout -b newbranch
Switched to a new branch 'newbranch'
$ touch anotherfile.txt
$ git status
On branch newbranch
Untracked files:
(use "git add <file>..." to include in what will be committed)
anotherfile.txt
nothing added to commit but untracked files present (use "git add" to track)
$ git stash apply
On branch newbranch
Changes not staged for commit:
modified: file1.txt
modified: file2.txt
Untracked files:
anotherfile.txt
no changes added to commit (use "git add" and/or "git commit -a")
现在你已经知道了如何在当前分支中使用 git stash
命令来保存和恢复工作现场了。希望这篇文章能够帮助你更加高效地进行 Git 开发工作。