git stash

在git中有时候我们工作做了一半,但是有点急事需要离开一段时间,或者现在需要切换到另一个分支下,去维护和修改一些其它的东西,但是我们现在的工作还没有完成,提交上去的话,并不是完整的,那么该怎么办呢?

    git提供了保留现场和恢复现场的操作。通过git stash操作,你可以把你当前的工作进度暂存起来(我认为其实就和git add类似,放到了git的暂存区中因为git status的话,你可以看见当前分支是clean的)

$ vim LICENSE

$ git stash
Saved working directory and index state WIP on dev: 47f7c9c 修改了readme.txt $ git status
On branch dev
nothing to commit, working tree clean

你可以多次保存现场,但是现场之间并不是连贯的哦(意思是,你将当前状态保存了现场之后,你打开你一个东西,是你保存现场之前完全没有修改的样子!),所以我暂时觉得多次保存现场没有太大的意义。但是现场的存储,你要知道的是,它是通过栈的方式存储的,即其实你保存现场和恢复现场遵循的都是,先进后出的!

上面说了保存现场是:git bash,那么恢复现场该怎么办?

别着急先说如果你的现场存了很多个,怎么查看现场列表

通过git stash list 就可以查看你的现场列表了!

$ git stash list
stash@{0}: WIP on dev: 47f7c9c 修改了readme.txt
stash@{1}: WIP on dev: 47f7c9c 修改了readme.txt
stash@{2}: WIP on dev: 47f7c9c 修改了readme.txt

后面的"修改了readme.txt"是当前节点的commit -m注释,因为我么这三个现场都是对同一个节点的现场保留

那么恢复现场该怎么办呢?
我说过现场存储的数据结构是栈,那么学过数据结构的人应该知道,栈有入栈(push)和出栈(pop),但是还有一种查看栈顶元素(peek)但是不出栈的操作,那么对应git的现场保留也应该有这样的操作!
push:git stash 现场保留

pop:git stash pop 恢复现场,并且从现场列表中删除栈顶现场

peek:git stash apply 恢复现场,但是不从现场列表中删除现场

如果使用了git stash apply 又要删除现场的话,就要额外使用一条命令:
git stash drop(但是此条命令也只能删除栈顶的一个现场)

所以我这里不建议多个现场!

如果多个现场,你又想要恢复特定的现场呢?其实git也有提供:
通过git stash apply stash@{0}[stash的id]

bug修复连贯案例:

如果你当前发现master分支有bug,随即你在master分支上新建了一个分支issue-500,修改完了之后,你切换到master分支,通过git merge issue-500,之后master造成了修改!那么你的其它分支应该马上和master合一次(正常情况下是对dev修复bug之后,dev分支和个人分支合)

这里合并,最好就使用禁用fast forward的普通合并:

merge --no-ff -m "合并master上改好的bug" dev

这里复现一次这个过程:

先在master分支上新建一个LICENSE文件,随便写点内容:

当前是在主分支(master上)

vim LICENSE:
hello,write by mzy.
...
wq

然后为master创建一个dev分支:

git branch dev

然后在master上创建并切换到一个issue-404分支:

git checkout -b issue-404

修改LICENSE

vim LICENSE
hello, write by mzy
在issue中的修改
...
wq

然后:

git add LICENSE
git commit -m "issue-404中修改了LICENSE"

切换回master分支:

合并issue分支:
$ git merge issue-404
Already up to date.

合并成功!
(注意:如果是没有冲突的合并,git自动就提交到了版本库,但是如果有冲突,记得先手动解决冲突之后,记得要git add、

git commit 到版本库哦)

然后我们可以删除这个修改问题的分支issue-404了:

$ git branch -d issue-404
Deleted branch issue-404(was 6488267).

(以上删除issue-404分支,因为合并了,所有直接删除成功,如果没有合并的话,要强制删除记得使用-D哦)

切换到我们的dev分支查看LICENSE文件:

发现master的改变,并没有被推送给子分支dev,所以需要在当前的dev分支上合并一下master中的修改!

git merge --no-ff -m "合并master上改好的bug" master
cat LICENSE

发现之前的修改拿到了!

(这里有个概念:upstream和downstream,up我理解是远端的,较稳定的一端,比如master和dev比,master是主分支稳定的就算是up,相对于master来说它的down就是dev,因为master最后需要合并dev中的内容[拿到dev中的内容])

mzy git学习, 保留现场,恢复现场,以及bug分支处理(七)的更多相关文章

  1. GIT学习笔记(4):远程分支

    GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...

  2. git学习(4)远程库和分支管理

    git学习(4)远程库和分支管理 1.1建立本地git库和远程库联系 我使用的是GitHub上的库,首先在GitHub上新建一个库,在建立与远程库的联系之前需要建立ssh key.建立ssh key可 ...

  3. mzy git学习,初识git(一)

    GIT学习 git工作区.暂存区.本地库.远程库 工作区:实际上我们工作的地方,进行写代码或者文件的地方. 暂存区:我们执行了git add 操作之后,就会被提交到暂存区. 本地库:其实最后我们需要执 ...

  4. mzy git学习,git协同开发忽略文档配置以及一些杂点(九)

    回忆一个电脑多账户问题 之前也说了,如果使用ssh登陆的话,一个电脑就只能登陆一个账号了,不像通过凭据可以切换(但是其实也可以每次去生成新的公钥和私钥,只要你不嫌麻烦) 再次补充: ssh-keyge ...

  5. mzy git学习,git推送到远程库(八)

    git在同步到远程库 关于git中多个用户切换的事情: 完全使用账户密码策略连接远程库: 之前一直尝试在本地切换多个用户,发现一直不行,很奇怪?后面发现必须要去win10的凭据管理器删除当前git的凭 ...

  6. mzy git学习,分支冲突,以及冲突解决(五)

    冲突解决: 先尝试制造冲突: 首先我:git checkout -b mzy 创建一个mzy的分支 然后在其中修改readme.txt文件,随便加上一点东西. vim readme.txt   wri ...

  7. mzy git学习,分支以及分支合并(四)

    git 鼓励大量使用分支:最后进行master和分支之间的合并 git branch git branch 查看当前有多少分支,并且将当前在使用的分支用*标注出来. [一定要注意git的分支有从属概念 ...

  8. 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

  9. mzy git学习,禁用Fast forward的普通合并(六)

    git merge --no-ff -m "msg" x-branch:禁用Fast forward的普通合并 通常,合并分支时,如果可能,Git会用Fast forward模式, ...

随机推荐

  1. window对象之计时器--v客学院技术分享

    setTimeout()和setInterval()可以用来注册在指定的时间之后单次或者重复调用的函数.因为它们都是客户端JavaScript中重要的全局函数,所以定义为window对象的方法,但是作 ...

  2. 微信小程序云开发-云存储-获取带图片的商品列表

    一.将商品图片上传至云存储 如下图,已准备5张商品图片,并且已经将商品图片上传至云存储  二.数据库表添加图片字段 在数据库表goods添加字段image,该字段用来存储图片的url信息 image在 ...

  3. CentOS下 Django部署 uWSGI+Django(一)

    由于新冠疫情的缘故,公司要求员工停薪休假,赋闲在家的时候还是决定做点正事,学学习. 本人Linux入门水平,Python入门水平,所以在网上找的那些python部署的帖子,看的是云里雾里的,也没有达到 ...

  4. 在LinuxMint 17 MATE中安装NVIDIA显卡驱动

    第一步:在Linux系统中安装Nvidia显卡驱动需要关闭X Server. 打开终端,进入ROOT权限,执行以下命令 $ sudo service mdm stop 此时将会把X Server关闭, ...

  5. Qt+腾讯IM开发笔记(一):腾讯IM介绍、使用和Qt集成腾讯IM-SDK的工程模板Demo

    前言   开发一个支持全国的IM聊天,可以有基本的功能,发送文本.图片.文件等等相关内容.   腾讯IM产品 概述   腾讯即时通信IM是腾讯推出的即时聊天程序,当前时间为2020年3月(腾讯IM的优 ...

  6. 2020国防科大综述:3D点云深度学习——综述(3D点云分割部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D点云分割 3.1 3D语义分割 3.1.1 基于投影的方法 多视图表示 球形表示 3.1.2 基于离散的方法 稠密离散表示 稀 ...

  7. 学习Android Jetpack? 入门教程和进阶实战这里全都有!

    前言 2018年谷歌I/O,Jetpack横空出世,官方介绍如下: Jetpack 是一套库.工具和指南,可帮助开发者更轻松地编写优质应用.这些组件可帮助您遵循最佳做法.让您摆脱编写样板代码的工作并简 ...

  8. 利用system generator 生成vivado ip—以低通滤波器举例

    前段时间自学了matlab和vivado联合推出的system generator工具,用来做数字信号处理,十分好用且使开发更便捷,下面举个例子来供大家一起学习下. 首先打开matlab命令行,输入s ...

  9. C++STL—string类

    string容器 1.1 string容器的基本概念 string容器是一个类 这个容器中有一个指针,指针维护了一个数组 string容器提供copy.find.insert.replace等等功能 ...

  10. Python3中dict字典的相关操作函数

    字典对象的内建函数 1. clear() 清空字典. 例: >>> a = {1:3, 2:4} >>> a.clear() >>> a {} 2 ...