git版本管理软件——git储藏
储藏工作进度 git stash
在开发途中,有git add了一些内容和未追加的内容,但此时有紧急处理的事情,需要切换到某一条分支下修复功能,但git不能直接切换(不在同一个开发版本下)例如v1.2的最新开发进度如下所示
commit 9815af9d1a1639499cb784c32a2c0e390998a067
Merge: 4c6447e 84cb30d
Author: zx <zx@git.com>
Date: Tue Nov 29 22:36:11 2016 +0800Merge branch 'master' into v1.2commit 84cb30d370453e2e1a7dc2c3d974c397a8fa53b2
Author: zx <zx@git.com>
Date: Tue Nov 29 22:28:08 2016 +0800add by 2016.11.29commit 4c6447ec598616638b1d78d0c04757d48a04701a
Author: zx <zx@git.com>
Date: Sun Nov 20 10:45:14 2016 +0800test 1 for v1.2
而v1.1分支的开发进度如下所示。
commit 28f059eb7d9479cc6d5c6f684e106bd540f1f1e5
Author: zx <zx@git.com>
Date: Sun Nov 20 10:18:47 2016 +0800test 3 for v1.1commit d8033d48714dcaf8b8fabfbaacc6df8b79b23600
Author: zx <zx@git.com>
Date: Sun Nov 20 10:17:52 2016 +0800test 2 for v1.1commit f35d10ace6da47c1b19c4eaf682e5e6645a3d2e1
Author: zx <zx@git.com>
Date: Sun Nov 20 10:16:54 2016 +0800test 1 for v1.1
使用情景:两条分支处于并行开发的状态,v1.1和v1.2负责开发和测试不同模块的功能。工作时正好处于v1.1的开发中,中途有git add一些修改好的文件,以及未提交的文件,因为代码才写到一半,此时突然需要修改v1.2代码的功能,并且任务非常紧急。因为工作区中有正在修改和添加代码的文件,暂存区中又有修改好的文件。如果强制切换到v1.2分支上,git会提示切换失败,如下所示。
ghost@ghost-machine:~/workspace/test/Project_test$ git checkout v1.2
error: Your local changes to the following files would be overwritten by checkout:readme.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
ghost@ghost-machine:~/workspace/test/Project_test$
原因是工作区并未干净,如下所示
ghost@ghost-machine:~/workspace/test/Project_test$ git status
位于分支 v1.1
要提交的变更:(使用 "git reset HEAD <文件>..." 以取消暂存)修改: readme.txt尚未暂存以备提交的变更:(使用 "git add <文件>..." 更新要提交的内容)(使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改: v1.1_test.txtghost@ghost-machine:~/workspace/test/Project_test$
此时用到git的储藏
命令:git stash
这个时候使用git储藏命令,将工作的内容暂时保存,即储藏起来,此时工作区是干净的,这样就可以切换到v1.2分支上修改功能。
ghost@ghost-machine:~/workspace/test/Project_test$ git stash
Saved working directory and index state WIP on v1.1: 28f059e test 3 for v1.1
HEAD 现在位于 28f059e test 3 for v1.1
ghost@ghost-machine:~/workspace/test/Project_test$ git status
位于分支 v1.1
无文件要提交,干净的工作区
ghost@ghost-machine:~/workspace/test/Project_test$ git checkout v1.2
切换到分支 'v1.2'
ghost@ghost-machine:~/workspace/test/Project_test$
恢复工作进度 git stash pop
命令:git stash pop
或命令:git stash apply
该命令是将保存的进度恢复到工作区!
v1.2添加代码完成后,切换回v1.1将保存的进度恢复现场
ghost@ghost-machine:~/workspace/test/Project_test$ git stash pop
位于分支 v1.1
尚未暂存以备提交的变更:(使用 "git add <文件>..." 更新要提交的内容)(使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改: readme.txt修改: v1.1_test.txt修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丢弃了 refs/stash@{0} (21bfc22670ffe8c1a2d86dacfc9869954d49541b)
ghost@ghost-machine:~/workspace/test/Project_test$
可以看到,恢复了之后有个标记被丢弃,该标记的使命已经完成
丢弃了 refs/stash@{0} (21bfc22670ffe8c1a2d86dacfc9869954d49541b)
并且之前提交的git add 也返还成未提交的状态。
整理git储藏
查看储藏信息git stash list
再次将刚才的信息压入储藏,使用命令:git stash list可以看到储藏信息。
ghost@ghost-machine:~/workspace/test/Project_test$ git stash list
stash@{0}: WIP on v1.1: 28f059e test 3 for v1.1
ghost@ghost-machine:~/workspace/test/Project_test$ git log
commit 28f059eb7d9479cc6d5c6f684e106bd540f1f1e5
Author: zx <zx@git.com>
Date: Sun Nov 20 10:18:47 2016 +0800test 3 for v1.1
储藏的信息
WIP on v1.1 :执行储藏的分支为v1.1分支
28f059e :执行储藏是所处的工作区位置的commit哈希值为28f059e,这边仅显示前面的几位数。
test 3 for v1.1 :执行储藏是所处的工作区位置的commit的注释。
git 储藏区可以储藏多条工作区信息
ghost@ghost-machine:~/workspace/test/Project_test$ git stash list
stash@{0}: WIP on v1.4: 8602795 add pathc diff is 2
stash@{1}: WIP on v1.5: 8602795 add pathc diff is 2
stash@{2}: WIP on v1.1: 28f059e test 3 for v1.1
若储藏着多条信息,需要恢复中间或下面的几条时,只需要在恢复命令后面添加对应的编号即可。
如恢复stash@{2}: WIP on v1.1: 28f059e test 3 for v1.1这个储藏,切换至v1.1分支,输入一下命令:
命令:git stash pop stash@{2}
ghost@ghost-machine:~/workspace/test/Project_test$ git stash pop stash@{2}
位于分支 v1.1
尚未暂存以备提交的变更:(使用 "git add <文件>..." 更新要提交的内容)(使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改: readme.txt修改: v1.1_test.txt修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丢弃了 stash@{2} (f84083046e26f5fa5d96bd2d2952f0a6f063633f)
ghost@ghost-machine:~/workspace/test/Project_test$
git stash恢复出错处理
不在执行储藏的分支上恢复
注意:工作区与暂存区无分支概念,在哪条分支或master主干上都可以进行恢复,此时就会造成冲突!如下所示,在v1.2添加完功能后,忘记切换回v1.1分支,就会出现冲突。
ghost@ghost-machine:~/workspace/test/Project_test$ git stash pop
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
ghost@ghost-machine:~/workspace/test/Project_test$ git status
位于分支 v1.2
要提交的变更:(使用 "git reset HEAD <文件>..." 以取消暂存)修改: v1.1_test.txt未合并的路径:(使用 "git reset HEAD <文件>..." 以取消暂存)(使用 "git add <文件>..." 标记解决方案)双方修改: readme.txtghost@ghost-machine:~/workspace/test/Project_test$ git diff
diff --cc readme.txt
index eb645f1,86550a8..0000000
--- a/readme.txt
+++ b/readme.txt
@@@ -1,5 -1,3 +1,9 @@@add 2016.06.13++<<<<<<< Updated upstream+test for git stasha++add by 2016.11.29
++=======
+ test git stash
++>>>>>>> Stashed changes
ghost@ghost-machine:~/workspace/test/Project_test$
git stash pop恢复后并没有删除储藏进度,恢复错误后将错误的文件git checkout还原,工作区干净后切换到对应的分支,在git stash pop恢复现场
步骤如下
根据提示现将文件reset,然后再将文件checkout还原。
ghost@ghost-machine:~/workspace/test/Project_test$ git reset HEAD v1.1_test.txt readme.txt
重置后取消暂存的变更:
M readme.txt
M v1.1_test.txt
ghost@ghost-machine:~/workspace/test/Project_test$ git status
位于分支 v1.2
尚未暂存以备提交的变更:(使用 "git add <文件>..." 更新要提交的内容)(使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改: readme.txt修改: v1.1_test.txt修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
ghost@ghost-machine:~/workspace/test/Project_test$ git checkout readme.txt v1.1_test.txt
ghost@ghost-machine:~/workspace/test/Project_test$ git status
位于分支 v1.2
无文件要提交,干净的工作区
ghost@ghost-machine:~/workspace/test/Project_test$
恢复后就可以切换回分支v1.1来恢复现场。
不在分支的一个工作点恢复
例如v1.1分支在某个时间处理紧急任务,将工作进度储藏,但处理完后回到v1.1分支,忘记了该分支有储藏,没有恢复现场,继续开发。分支提交了几个commit后发现该分支还有代码在储藏着,需要恢复回来。
v1.1日志
commit 5bb1cf87d50d9591f98d3966c9da278bbd23766d
Author: zx <zx@git.com>
Date: Thu Dec 1 21:28:45 2016 +0800add 2016.12.01commit 28f059eb7d9479cc6d5c6f684e106bd540f1f1e5
Author: zx <zx@git.com>
Date: Sun Nov 20 10:18:47 2016 +0800test 3 for v1.1
git 储藏区情况
ghost@ghost-machine:~/workspace/test/Project_test$ git stash list
stash@{0}: WIP on v1.1: 28f059e test 3 for v1.1
stash@{1}: WIP on v1.4: 8602795 add pathc diff is 2
stash@{2}: WIP on v1.5: 8602795 add pathc diff is 2
ghost@ghost-machine:~/workspace/test/Project_test$
执行git stash pop后,git会自动合并冲突,并列出冲突的地方。
ghost@ghost-machine:~/workspace/test/Project_test$ git stash pop
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
ghost@ghost-machine:~/workspace/test/Project_test$ git status
位于分支 v1.1
要提交的变更:(使用 "git reset HEAD <文件>..." 以取消暂存)修改: v1.1_test.txt未合并的路径:(使用 "git reset HEAD <文件>..." 以取消暂存)(使用 "git add <文件>..." 标记解决方案)双方修改: readme.txt
冲突的文件:
ghost@ghost-machine:~/workspace/test/Project_test$ git diff
diff --cc readme.txt
index 664a8e0,86550a8..0000000
--- a/readme.txt
+++ b/readme.txt
@@@ -1,3 -1,3 +1,7 @@@add 2016.06.13++<<<<<<< Updated upstream
+add by 2016.12.01
++=======
+ test git stash
++>>>>>>> Stashed changes
ghost@ghost-machine:~/workspace/test/Project_test$
这时解决冲突的方法和打补丁解决冲突的方法一样,手动删除旧的代码,保留最新的修改,再次提交说明“这个操作是合并储藏”即可。
git版本管理软件——git储藏相关推荐
- git版本管理软件——git发布补丁和打补丁
某几个文件的代码修改后要发到同事开发的代码中,或者修复了bug后要将修复的代码添加到另外一份库中,这个时候手动记下改动太麻烦,git有创建补丁的功能,即将改动的代码统一添加到一个补丁文件中,后缀名为. ...
- 版本管理软件--Git的安装、配置并使用
版本管理软件分类 集中式,典型代表 SVN 分布式,典型代表 Git 安装 安装git,一直 下一步 安装即可,如果不想安装到C盘,可以把C换成D 不要安装到含有中文的路径中. 安装完毕,不可以剪切( ...
- git版本管理软件——搭建git服务器
创建管理员git 为管理员用户添加sudo权限 生成管理员秘钥 设置管理员git提交账号和邮箱 下载安装gitolite 启动gitolite 添加项目版本库 添加项目成员 项目成员下载项目 gito ...
- (十九)git版本管理软件——搭建git服务器
创建管理员git 为管理员用户添加sudo权限 生成管理员秘钥 设置管理员git提交账号和邮箱 下载安装gitolite 启动gitolite 添加项目版本库 添加项目成员 项目成员下载项目 gito ...
- Git版本管理软件使用
Git是目前世界上最先进的分布式版本控制系统,下面介绍如何使用Git管理项目. 一.下载Window Git工具 https://pan.baidu.com/s/1EF_KybTb32VACzXniF ...
- Git 版本管理之git神器版本回退(版本回退-已经commi t尚未push到remote仓库)
起语: 版权声明: 腾讯课堂->零声学院. 我只是用来方便学习 && 复习!!! 我只是一个学习者, 从来不对我说过的话负责, 大家看到谨慎参考!!! 版本回退-已经commi ...
- Git 版本管理之git神器查看commit的信息
起语: 版权声明: 腾讯课堂->零声学院. 我只是用来方便学习 && 复习!!! 我只是一个学习者, 从来不对我说过的话负责, 大家看到谨慎参考!!! 查看commit的内容 g ...
- 版本管理工具Git(2)git的使用
上一篇带大家认识了Git,在本篇中将讲解Git的安装及使用: Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用 ...
- ❤️❤️爆肝3万字整理小白入门与提升分布式版本管理软件:Git,图文并茂(建议收藏)❤️❤️
小白快速快入门Git 什么是Git SVN VS Git 什么是版本控制 安装Git 谁在操作? Git本地仓库 本地仓库构造 重点 Git常用基本操作 git add git commit git ...
- Linux git版本管理的使用/git教程
转自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 1.git教程 史上最浅显易 ...
最新文章
- 基于libmad库的MP3解码简析
- 鼠标滚动缩放图片效果
- 成功解决You are using pip version 9.0.3, however version 10.0.1 is available. You should consider upgr
- jq php异步上传图片,PHP+Ajax实现图片异步上传预览
- Ubuntu下面Master PDF Editor背景颜色设置
- 斑马无线打印服务器,如何设置斑马打印机无线WiFi
- 链表创建、逆置、删除详解
- IO静态映射和动态映射
- BZOJ3997 TJOI2015组合数学(动态规划)
- php网站鼠标美化,几款耐用的鼠标指针皮肤,简约清新
- java时间格式化工具类_java日期格式化工具类
- Wowza服务器系列(1):介绍
- Equations of Mathematical Magic题解
- 极化的概念及天线极化方式
- 基础内网信息探针思路
- php 蛋糕一刀均分试题,5个小朋友分一个蛋糕,只准切三刀,该怎样才能平分
- av_interleaved_write_frame(fmt_ctx, enc_pkt);返回-22
- 第一套微信小程序教程目录(转载侵删)
- win7 用软碟通装ubuntu双系统
- Rust FFI 编程 - Bindgen 工具介绍