git stash

来源:互联网 发布:seo前沿者 编辑:程序博客网 时间:2024/05/22 06:38
最近在使用Git管理项目工程的时候,遇到了很多问题,也学习到了很多关于Git常见使用的技巧,下面就其中关于Git Stash的用法和大家分享下。
首先,简单介绍下Git Stash命令的用法,详细的用法在man文档中有相关介绍,下面我来说明常见的使用。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
关于Git Stash的详细解释,适用场合,这里做一个说明:

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

命令详解

 []方括号中内容为可选,[<stash>]里面的stash代表进度的编号形如:stash@{0}, <>尖括号内的必填
git stash  对当前的暂存区和工作区状态进行保存。 
git stash list  列出所有保存的进度列表。 
git stash pop [--index] [<stash>] 恢复工作进度

--index 参数:不仅恢复工作区,还恢复暂存区<stash> 指定恢复某一个具体进度。如果没有这个参数,默认恢复最新进度如:以下命令恢复编号为0的进度的工作区和暂存区# git stash pop --index stash@{0}

git stash [save message] [-k|--no-keep-index] [--patch]

这是git stash保存进度的完整命令形式使用save可以对进度添加备注# git stash save "这是保存的进度"现在执行list,会发现后面会出现自定义的被合租# git stash liststash@{0}: On master: 这是保存的进度-k和--no-keep-index指定保存进度后,是否重置暂存区--patch 会显示工作区和HEAD的差异,通过编辑差异文件,排除不需要保存的内容。和git add -p命令类似

git stash apply [--index] [<stash>] 不删除已恢复的进度,其他同git stash pop 
git stash drop [<stash>] 删除某一个进度,默认删除最新进度 
git stash clear 删除所有进度 
git stash branch <branchname> <stash> 基于进度创建分支

再讲一下自己最近项目中遇到的一个问题,本来我们的线下开发分支叫做develop,我在这上面在开发,然后leader说现在加了一个分支叫做pre_dev,这个分支是用来进行code review的,所以要求开发人员以后都要在这个分支上面进行开发,然后再发merge_request,给leader进行code review,但是我现在在的分支是develop分支做的修改,如何保存这些修改到pre_dev,并且将develop恢复到最后一次提交之前的代码,可以通过如下命令进行操作:

1、git stash //对当前的暂存区和工作区状态进行保存。 

2、git fetch  //一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地

3、git checkout pre_dev  //切换到pre_dev分支

4、git stash pop //恢复工作进度

5、git add . //把文件修改添加到暂存区

6、git commit -m "修改" // 暂存区的所有内容提交到当前分支

7、git pull //拉下远程分支,默认进行合并,git pull = git fetch + git merge

8、git push //没有冲突,代码push到远程端


0 0
原创粉丝点击