Git 工作区储藏

问题场景


现在有一个 master 分支,master 分支中有一个文件叫 01.txt ,该文件中只有一行数据,然后对 01.txt 执行 add 和 commit ,然后再从 master 分支中创建出一个新的分支 fa ,切换到 fa 分支上,然后向 01.txt 中再添加一行数据,添加成功之后,不做任何事情,再切换回 master 分支,此时用 cat 命令查看 01.txt 文件,发现竟然有两行数据,按理说 master 中的 01.txt 只有一行数据,而 fa 中的 01.txt 有两行数据,整个过程如下图:

gif
要搞清楚这个问题,得先明白下面这个问题:

cat 命令和 git 无关,就是用来查看文件的,我为了演示方便使用了 cat 命令,这和直接用记事本打开文件查看效果是一样的。

可能眼尖的小伙伴已经发现端倪了,我们上面这个操作少了两个步骤,那就是 add/commit ,fa 分支中的数据修改之后直接切换回了 master ,而没有 add/commit 。正常情况下(修改数据后 add/commit),如果 master 和 fa 分支中的数据不一致,我们执行了 git checkout - 进行分支的切换,这个时候工作区中的文件内容也是会跟着变化的(大家可以通过 cat 命令或者直接在记事本中打开工作区的文件来查看这种变化),但是如果我在 fa 分支中修改了文件却没有 add/commit 就切换回 master ,此时如果工作区的文件变化了,可能会导致我在 fa 分支中的修改丢失,因此,这个时候工作区的文件就没有变化,即工作区的文件内容还是 fa 分支中修改的内容。

解决这个问题,我们有两种方案,请小伙伴们往下看。

解决方案


方案一

第一种解决方案就是在某一个分支修改文件之后,先 add 并且 commit 之后再去切换分支,这个操作就比较简单了,我这里就不再演示了。

方案二(储藏)

第二种解决方案就是储藏 (Stashing),储藏适用在如下场景中:

当我在一个分支 fa 中修改了文件,但是还没有完全改好,此时我并不想 add/commit ,但是这个时候有一个更急迫的事情在另外一个分支 fb 上需要我去做,我必须要切换分支。

在这样一个场景中,如果我直接切换分支,会出现如下两个问题:

1.从 fa 切换到 fb 之后,工作区的代码还是 fa 的代码,不符合我的工作要求。
2.假设我不在乎问题 1,在 fb 中直接修改工作区的代码,等我在 fb 中修改完后提交后再回到 fa ,会发现我之前的代码丢失了。

为了解决这个问题,Git 给我们提供了储藏 (Stashing)。

现在假设一开始 master 和 fa 分支中的文件内容都是一致的,而且两个分支的工作区都是干净的,即没有东西需要 add/commit ,此时,我在 master 中修改了文件,修改完成之后,执行 git status 命令我们看到 master 中有东西需要 add/commit ,此时我想切换到 fa 分支中去,但是并不想对 master 分支执行 add/commit ,这个时候我们可以执行如下命令,先将当前分支中的文件储藏起来:

$ git stash

OK,执行完 git stash 命令之后,再执行 git status ,我们发现此时 master 分支已经是干净的了,此时我们可以愉快的切换到 fa 分支中去了,切换到 fa 分支之后,我们发现 master 中的修改并没有干扰到 fa 分支,当我们完成了 fa 分支中的工作之后,再回到 master 分支,此时执行如下命令可以恢复刚刚储藏的数据:

$ git stash apply

上面这个命令执行完之后,master 分支中的工作区中的文件就恢复了,此时执行 git status 就可以看到又有数据需要 add/commit 了。

我们也可将工作区储藏多次,这个时候我们可以执行如下命令来查看储藏:

$ git stash list

执行效果如下:

p255

git stash apply 表示恢复最近一次储藏,如果我们想恢复到之前的某一次储藏,可以加上储藏的名字,如下:

$ git stash apply stash@{1}

还有一些其他的关于储藏的命令:

恢复储藏并出栈
$ git stash pop

执行效果和 git stash apply 一样,不同的是,这里执行完之后,会将栈顶的储藏移除。

删除某一个储藏
$ git stash drop stash@{4}

最后一个参数是指储藏的名字。

更多干货请移步:https://antoniopeng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值