首页 > 编程知识 正文

git stash drop,git stash save

时间:2023-05-05 09:28:41 阅读:134840 作者:3804

如果修改了代码且commit未提交到本地库,git将拒绝切换分支的命令。 如果不想提交不完整的代码,但必须修复紧急错误,stash可以将当前未提交到本地仓库的代码存储(stash )在Git的堆栈中,而不是存储在仓库中。 stash后的工作区与上次提交的内容相同,工作区已被清理。 修复并提交错误,将其推送到远程仓库,然后使用git stash apply或pop命令撤消以前完成的一半工作区。 在修改代码时,stash经常用于切换到其他分支。 stash可以“保存”当前工作空间的修改,以便以后在git stash pop中恢复现场。 stash是本地的,不会传递到远程仓库。

基本命令将git stash保存到git堆栈git stash命令将工作区和临时区域的更改保存到git堆栈,并创建说明信息。 默认值是最后发送的节点编号。

git stash save git stash save ‘说明信息’是定制的说明信息,命令比git stash多一点。 同样,它表明信息有助于理解stash的内容。

在APP中,建议在每个stash中添加消息以记录版本,然后使用git stash save而不是git stash命令。 例如以下所示。

$ git stash save 'test-cmd-stash '

savedworkingdirectoryandindexstateonautoswitch : test-cmd-stash

HEAD目前位于296 E8 D4 removeunnecessarypostionresetinonresumefunction

恢复工作区git stash pop git stash pop命令会从git堆栈中弹出stash的内容,并恢复以前的工作区修改。 默认情况下,会显示顶部的栏,即stash@{0}。 注:此命令将删除堆栈中最近保存的内容。 堆栈是先进先出的。

您也可以通过在pop后加上stash@{n}来指定要弹出的项目。

git stash pop stash@{1}

将指定的进度恢复到工作区。 stash_id是通过git stash list命令获取的

按顺序运行git stash save “test1”和git stash save “test2”命令可以获得以下效果:

$ git状态列表

sash @ {0} : on master : test 2

stash @ {1} : on master : test 1

$ git stash pop

On branch master

Changes not staged for commit:

(use ' git addfile . ' toupdatewhatwillbecommitted )

(use ' git check out-- file . ' todiscardchangesinworkingdirectory )

modified : src/main/ja dddddd.Java

nochangesaddedtocommit (use ' gitadd ' and/or ' git commit-a ' )。

dropped refs/stash @ {0} (a fc5 fsdfsfafasdffgegwea ) ) ) ) ) ) ) ) ) ) 65

$ git状态列表

stash @ {0} : on master : test 1

git stash apply git stash apply将堆栈中的内容应用于当前目录。 与git stash pop不同,此命令不从堆栈中删除内容。 git stash apply命令可以按名称指定要使用的stash,缺省情况下使用最近的stash@{0}。

$ git状态应用程序

On branch master

Changes not staged for commit:

(use ' git addfile . ' toupdatewhatwillbecommitted )

(use ' git check out-- file . ' todiscardchangesinworkingdirectory )

modified : src/main/jarwerwe.Java

nochangesaddedtocommit (use ' gitadd ' and/or ' git commit-a ' )。

$ git状态列表

sash @ {0} : on master : test 2

stash @ {1} : on master : test 1

堆栈的内容没有被删除

。 

 

git stash list

列出当前仓库下所有的stash条目,每一条stash用stash@{n}标识。

$ git stash list
stash@{0}: On autoswitch: test-cmd-stash

一个典型的输出如下:

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

 

git show stash@{n}

当有多条记录并且过了一段时间忘记stash内容时通过该命令可以查看stash的具体内容

 

删除stash git stash drop 

丢弃stash条目,默认丢弃最上面的那条,即stash@{0},此外还可以在drop后加stash@{n}来指定要丢弃的stash条目。

可以使用git stash drop命令,后面可以跟着stash名字。下面是一个示例:

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log


$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)
或者使用git stash clear命令,删除所有缓存的stash。

 

git stash clear

清除所有的stash条目

 



 

 

具体执行

现有两个分支master和dev001,当前的工作分支是dev001。

$ git branch
  master
* dev001


当前分支dev001的工作尚未完成,而另一项任务需要优先完成,需要创建一个新分支来工作,此时可以把当前工作现场“保存stash”起来,等紧急任务做完,再恢复stash pop工作区后继续工作。


1、保存工作区的修改
$ git stash
 执行上面命令后,查看状态

$ git status
On branch dev001
nothing to commit (working directory clean)

可见工作区是干净的

2、创建分支
    假设需要在分支master上修复,就切换到master上。

$ git checkout master
    在master上创建新分支bug001,并设为当前工作分支。

$ git checkout -b bug001
 创建bug001分支并且切换到该分支,开始紧急任务工作

$ git add test.txt
$ git commit -m "fix bug 100"

 

 3、等我们修改完bug,提交后,切换到master分支,准备把分支bug001的新改代码合并到master上。

$ git checkout master

在master分支上合并bug001分支。

$ git merge      --no-ff -m   "merge bug001"    bug001 

(--no-ff参数,表示禁用Fast Forward模式,禁用后Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息)。


最后,删除分支bug001。    

$ git branch -d bug001


4、恢复工作现场

现在,我们可以恢复到dev001分支继续之前的工作了。

$ git checkout dev001

恢复工作现场。

$ git stash pop


 


 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。