`
langgufu
  • 浏览: 2308928 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

git stash 保存现场和恢复现场命令(转载)

阅读更多

git stash用于保存和恢复工作进度。

 

 

 

 

git stash

保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。

git stash list

显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候    选择。

git stash pop [--index] [<stash>]

如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作       进度列表中清除。

如果提供<stash>参数(来自git stash list显示的列表),则从该<stash>中恢复。恢复完毕 也将从进度列表中删除<stash>

选项--index除了恢复工作区的文件外,还尝试恢复暂存区。这也就是为什么在本章一   开始恢复进度的时候显示的状态和保存进度前的略有不同。

git stash [save [--patch] [-k|--[no]keep-index] [-q|--quiet] [<message>]]

这条命令实际上是第一条git stash命令的完整版。即如果需要在保存工作进度的时候使 用指定的说明,必须使用如下格式:

git stash save “message...”

使用参数--patch会显示工作区和HEAD的差异,通过对差异文件的编辑决定在进度中   最终要保存的工作区的内容,通过编辑差异文件可以在进度中排除无关内容。

使用-k或者--keep-index参数,在保存进度后不会将暂存区重置。默认会将暂存区和工  作区强制重置。

git stash apply [--index] [<stash>]

除了不删除恢复的进度之外,其余和git stash pop 命令一样。

git stash drop [<stash>]

删除一个存储的进度。默认删除最新的进度。

git stash clear

删除所有存储的进度。

git stash branch <branchname> <stash>

基于进度创建分支。

 

 

第二篇文章

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:

$ git status
# On branch dev
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   hello.py
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?

幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge

现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
$ git checkout -b issue-101
Switched to a new branch 'issue-101'

现在修复bug,需要把“Git is free software ...”改为“Git is a free software ...”,然后提交:

$ git add readme.txt 
$ git commit -m "fix bug 101"
[issue-101 cc17032] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)

修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 2 commits.
$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
 readme.txt |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git branch -d issue-101
Deleted branch issue-101 (was cc17032).

太棒了,原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了!

$ git checkout dev
Switched to branch 'dev'
$ git status
# On branch dev
nothing to commit (working directory clean)

工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

$ git stash pop
# On branch dev
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   hello.py
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)

再用git stash list查看,就看不到任何stash内容了:

$ git stash list

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

小结

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

感觉本站内容不错,读后有收获?

我要小额赞助,鼓励作者写出更好的教程

还可以分享给朋友

<iframe style="border: 0px;" src="http://service.weibo.com/share/share_social.php?url=http%3A%2F%2Fwww.liaoxuefeng.com%2Fwiki%2F0013739516305929606dd18361248578c67b8067c8c017b000%2F00137602359178794d966923e5c4134bc8bf98dfb03aea3000&amp;type=button&amp;ralateUid=1658384301&amp;language=zh_cn&amp;appkey=1391944217&amp;pic=http://www.liaoxuefeng.com/files/attachments/001385348516246a18bd54b498f4c74b694624d67f02fa9000/l&amp;searchPic=false&amp;style=full" frameborder="0" marginheight="0" scrolling="no" width="312" height="62"></iframe>

 

 

分享到:
评论

相关推荐

    git stash 缓存使用md,学习代码

    要恢复之前保存的工作现场,可以使用`git stash apply stash@{n}`命令,其中`n`是你想应用的stash的索引。如果你想删除已经应用的stash,可以加上`--drop`选项,如`git stash drop stash@{n}`。 #### 2.4 自动应用...

    前端大厂最新面试题-git stash.docx

    * `git stash pop`:从栈中读取最近一次保存的内容,也就是栈顶的 stash,会恢复到工作区 * `git stash apply`:将堆栈中的内容应用到当前目录,不同于 `git stash pop`,该命令不会将内容从堆栈中删除 * `git stash...

    Ruby-BigStash增强版的gitstash可以给每个stash命名

    BigStash是用Ruby编写的,它扩展了Git的原生功能,提供了一种更直观的方式来管理和恢复stash。通过给每个stash命名,你可以更方便地记住每个stash保存的特定任务或修复,从而提高工作效率。例如,你可以为一个正在...

    svn-stash:就像git stash,但是对于Subversion

    就像git stash命令一样,但是对于Subversion。 如果您不懂git,则应该阅读 Svn-stash允许您隐藏不想立即提交的更改。 在某些情况下,这可能会更有用。 为什么? 我喜欢git,我认为它应该用在任何程序员开始的新...

    git 常用的一些命令

    使用 git stash pop 命令可以恢复工作现场,并删除保存的缓存记录。 10. Git 分支管理命令 使用 git branch -D &lt;name&gt; 命令可以强行删除一个没有被合并过的分支。使用 git checkout -b dev origin/dev 命令可以...

    git stash参数介绍

    - `git stash`:默认情况下,此命令会保存你的工作区和索引中的更改,但不包括未跟踪的文件。 - `git stash list`:列出所有的 stash 记录,类似于 `git log`。 - `git stash apply` 或 `git stash pop`:恢复...

    vscode-gitstash:为VS Code添加了额外的Git隐藏功能

    gitstash.stash 使用自定义选项生成存储。 stash only使用stash only来生成简单的隐藏。 使用“ Keep index可以存储,但要保留添加到索引中的所有更改(保留它们)。 如果要隐藏未跟踪的文件,请使用“ Include ...

    git命令大全

    - **进度管理**:`git stash` 支持保存多个进度,可以通过 `git stash list` 查看,`git stash pop` 或 `git stash apply` 来恢复进度,`git stash drop` 或 `git stash clear` 来删除进度。 #### 十一、Git 重置 ...

    git stash暂存的操作方法

    Git stash 是一个强大的工具,它允许开发者在不提交本地更改的情况下切换到其他分支或保存工作现场。这在处理紧急情况,比如修复生产中的bug,或者需要在不同任务之间快速切换时特别有用。以下是对 `git stash` 命令...

    git 命令手册

    - `git stash`:保存当前的工作进度。 - `git stash list`:列出所有的stashes。 - `git stash apply [stashid]`:恢复指定stash的工作进度。 - `git stash drop [stashid]`:删除指定stash。 - `git stash pop ...

    git 常用命令和示例

    **标题:** git常用命令和示例 **描述:** git常用命令,对初学者很有帮助,从简单例子着手。浅入浅出,通俗易懂。 #### 二、设置用户名与邮箱 - **命令:** ```bash git config --global user.name "XXX" git...

    git 操作指南

    以上命令和选项构成了Git操作的核心,通过灵活运用这些命令可以有效地管理代码版本、进行代码合并、撤销错误操作和保存当前工作状态。需要注意的是,由于OCR技术限制,上述内容中可能存在个别字的识别错误,理解时需...

    git常用命令大全

    - `git stash`:保存当前工作进度,将未提交的修改暂存到一个栈中。 - `git stash list`:列出所有暂存的工作进度。 - `git stash apply`:恢复最新的暂存工作进度,并保留在栈上,以便后续再使用。 通过上述命令的...

    GIT常用命令整理

    - **`git stash apply stash@{&lt;n&gt;}`**: 恢复特定的暂存记录。如果之前有多次暂存,可以使用此命令恢复指定的暂存记录。 #### 八、其他实用命令 - **`git remote`**: 查看远程仓库的信息。通过此命令可以了解到远程...

    实际开发中 git 冲突解决与合并

    用git stash list可以看到保存的信息,其中stash@{0}就是刚才保存的标记。 2、pull内容暂存了本地修改之后,就可以pull了。使用git pull命令可以pull最新的代码。 3、还原暂存的内容:使用git stash pop stash@{0}...

    git 视频教程

    git视频教程.4.7.Git 命令 - git log、git stash、git tag.mp4 git视频教程.5.1.Git 命令 - git fetch.mp4 git视频教程.5.2.Git 命令 - git pull.mp4 git视频教程.5.3.Git 命令 - git push.mp4 git视频教程.5.4.Git ...

    git操作命令总结

    - **处理bug:** 遇到紧急bug需要修复时,可以暂时保存当前的工作状态,使用 `git stash` 命令进行暂存,修复完成后使用 `git stash pop` 恢复之前的工作状态。 #### 总结 以上总结了git的基本操作命令,包括了...

    git常用命令总结git常用命令总结git常用命令总结git常用命令总结

    git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git...

Global site tag (gtag.js) - Google Analytics