git stash简介

stash简介

stash中文可以翻译为‘贮藏处’,较为形象,其应用场景大致有:

--同一分支pull冲突时,例如,我们需要更新一下代码确认后再继续开发,pull却有大量冲突,这是可以使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,先把代码完整的pull下来并检查后,再使用git stash pop将以前的内容取出来,这时候会再让去解决冲突。

--切换分支解决问题时,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。这时使用git stash就可以将当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用stash相关指令将以前一半的工作应用回来。

stash常用指令

1.存储当前修改,git stash

        git stash会把所有未commit的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。可以看到,stash后当前工作目录无需要commit的内容了。

$ git status
On branch toMerge
Your branch is up-to-date with 'origin/toMerge'.
Changes not staged for commit:
        modified:   temp.html
no changes added to commit (use "git add" and/or "git commit -a")

$ git stash
Saved working directory and index state WIP on toMerge: d653a75 k
HEAD is now at d653a75k

$ git status
On branch toMerge
Your branch is up-to-date with 'origin/toMerge'.
nothing to commit, working directory cleangit s

2.查看现有stash,git stash list

$ git stash list
stash@{0}: On toMerge: 20190326save   //使用命令git stash save "20190326save"可对每次stash编写备注,便于识别
stash@{1}: WIP on toMerge: d653a75k

3.应用之前的stash,git stash pop/ git stash apply

git stash pop,将缓存堆栈中的第一个stash对应修改应用到当前的工作目录下,并删除。如果当前工作区不干净,弹出时有冲突,则stash列表会继续保留修改。

$ git stash pop
On branch toMerge
Your branch is up-to-date with 'origin/toMerge'.
Changes not staged for commit:
        modified:   temp.html
Dropped refs/stash@{0} (b59e084518353760c03ac17fff9947e9f5c50e11)

$ git stash list
stash@{0}: WIP on toMerge: d653a75 k

git stash apply,将缓存堆栈中的第一个stash对应修改应用到当前的工作目录下,但并不删除stash拷贝。如果不是应用第一个stash,应参考命令git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 。

$ git stash apply
On branch toMerge
Your branch is up-to-date with 'origin/toMerge'.
Changes not staged for commit:
        modified:   temp.html
no changes added to commit (use "git add" and/or "git commit -a")

$ git stash list
stash@{0}: On toMerge: 20190326save
stash@{1}: WIP on toMerge: d653a75 k

4.移除stash,git stash drop/git stash clear

git stash drop stash@{$num} ,移除指定的stash,git stash clear,删除所有的stash。

$ git stash list
stash@{0}: On toMerge: 20190326save
stash@{1}: WIP on toMerge: d653a75 k

$ git stash drop stash@{0}
Dropped stash@{0} (ab5e2af36f68665665328306a0a6f019ffbbbf49)

$ git stash list
stash@{0}: WIP on toMerge: d653a75 k

5.查看stash的diff,git stash show

git stash show stash@{$num} ,如果不带参数,则会查看最新stash的diff,在该命令后面添加-p或--patch可以查看特定stash的全部diff。

$ git stash show stash@{0}
 temp.html | 1 -
 1 file changed, 1 deletion(-)

$ git stash show stash@{0} -p
diff --git a/temp.html b/temp.html
index f393102..197afbd 100644
--- a/temp.html
+++ b/temp.html
@@ -11,7 +11,6 @@ alert($("#hello").text());
 alert($("#hello").text());
 alert($("#hello").text());
 alert($("#hello").text());
-alert($("#hello").text());
 </script>
 </body>

6.从stash创建分支,git stash branch

可以运行 git stash branch创建一个新的分支,检出你储藏工作时的提交,重新应用你的工作,如果成功,stash会被丢弃

$ git stash list
stash@{0}: WIP on toMerge: d653a75 k

$ git stash branch stashbranch2
Switched to a new branch 'stashbranch2'
On branch stashbranch2
Changes not staged for commit:
        modified:   temp.html

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (291fab4caa71b0bb8ec8b75911f14c2b3d808a3e)

$ git stash list //没有内容了

7.其他

git stash不会缓存以下文件:
• 在工作目录中新的文件(untracked files)
• 被忽略的文件(ignored files)

参考文档

git-stash用法小结,https://www.cnblogs.com/tocy/p/git-stash-reference.html

更多细节内容可以参考,git操作手册,https://git-scm.com/book/zh/v2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`git stash` 是一个用于保存当前工作目录状态的命令。它可以将未提交的修改(包括已跟踪和未跟踪的文件)保存到一个临时区域(stash),以便你可以切换分支、拉取最新代码或者应用其他修改。 当你在工作目录中有一些修改但不想立即提交它们时,可以使用 `git stash` 命令。它会将所有未提交的修改保存到一个栈中,并将工作目录恢复到干净的状态,就像你刚刚进行了最后一次提交一样。 你可以使用 `git stash save` 命令来保存修改,并为这个 stash 添加一个描述信息,例如: ``` git stash save "Saving my work" ``` 默认情况下,`git stash` 会保存所有的修改,包括已跟踪和未跟踪的文件。如果你只想保存已跟踪的文件,可以使用 `git stash save --keep-index` 命令。 当需要恢复之前保存的修改时,可以使用 `git stash apply` 命令。例如: ``` git stash apply ``` 这将会将最近保存的修改应用到当前工作目录中,但并不会删除这个 stash。 如果你想删除一个 stash,可以使用 `git stash drop` 命令,面跟上 stash 的标识符。例如: ``` git stash drop stash@{0} ``` 这将会删除标识符为 `stash@{0}` 的 stash。 除了基本的 `git stash` 命令外,还有其他一些相关的命令,如 `git stash list`(列出所有的 stash)、`git stash clear`(清除所有的 stash)等。 希望以上解释对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值