git总结 —— 切换到分支时提示提交或暂存修改

git总结 —— 切换到分支时提示提交或暂存修改

  • 修改记录
  • 问题场景描述
  • 解决思路
    • 提交本次修改到本地
    • 放弃本次修改
    • 暂存本次修改
    • 删除暂存区修改
      • 删除指定暂存记录
      • 删除暂存栈
  • 误删暂存栈中的数据如何恢复
    • 官方提示
    • 经过实践
  • 总结
  • 参考资料

修改记录

20211130:

  1. 新建文档,git stash 基本使用场景及方法概述;

20220208:

  1. 新增部分图片,说明弹出操作细节;
  2. 添加了误删 stash 记录后,如何恢复的说明;

问题场景描述

当在某一分支做了一些修改,但是临时需要切换到另一分支上时,就会提示以下问题:

在这里插入图片描述
提示,当前分支存在一些修改,请在切换分支前先提交本次修改或暂存。

解决思路

其提示已经相当明确了:

  1. commit 这次修改;
  2. 暂存本次修改;
  3. 放弃本次修改;

我们就挨个试验一下:

提交本次修改到本地

git status // 查看当前修改的文件,确认本次需要添加的修改文件;
git diff // 确认修改点
git add // 添加修改的文件
git commit -m “comment” // 对本次修改做简单说明,并在本地提交修改
git switch/checkout other_branch // 本地提交修改后,进行分支切换,就不会报错了

放弃本次修改

git reset --hard // 直接回退到修改前的状态
git switch/checkout other_branch // 本地提交修改后,进行分支切换,就不会报错了

暂存本次修改

git status // 查看当前修改的文件,确认本次需要添加的修改文件;
git diff // 确认修改点
git stash // 暂存本次修改
git switch other_branch // 本地提交修改后,进行分支切换,就不会报错了
git switch last_branch // 返回到切换分支前的修改分支
git stash list // 查看暂存信息列表

在这里插入图片描述
图中提示暂存栈空间中存在两个记录,stash@{0} 和 stash@{1}【注意这里,stash@{0} 是最近一次的暂存记录,也就是其下标越小日期越近】,由于没有进行新的 commit, 这里显示的暂存记录文字描述是一致的;

git stash apply stash@{0} // 提取暂存数据, apply 类似于 pop,但是 apply 不会清除记录
这里再弹出某个暂存栈记录时,本地是需要无修改的(无论是不是最新的分支),不然会提示本地存在为保存修改:
git总结 —— 切换到分支时提示提交或暂存修改_第1张图片
由于笔者这里都是工程进行重新编译后的文件修改,所以直接舍弃:

git reset --hard // 舍弃本地为保存的修改
git status		 // 查看工作区当前状态,应该是 “up-to-date”

删除暂存区修改

删除指定暂存记录

git stash pop	// 弹出最近的记录,所以想要成功使用 pop 的话需要确保当前分支是不存在未保存修改的
git drop stash@{0}	// 直接删除指定记录,且git不会将记录同步到当前分支

在这里插入图片描述
这里通过检查暂存栈数据列表,就会发现已经删除了指定数据,且栈数据下标自动更新:
在这里插入图片描述
git总结 —— 切换到分支时提示提交或暂存修改_第2张图片

删除暂存栈

也可以通过指令,清空整个暂存的栈数据:

git stash clear // 清除整个数据

误删暂存栈中的数据如何恢复

官方提示

git总结 —— 切换到分支时提示提交或暂存修改_第3张图片

git fsck --unreachable |
grep commit | cut -d\  -f3 |
xargs git log --merges --no-walk --grep=WIP

这里笔者尝试了一下,发现并没有达到想要的结果:
git总结 —— 切换到分支时提示提交或暂存修改_第4张图片
这里找到的记录并不是想要的误删掉的暂存数据记录;

经过实践

git stash --unreachable // 查看当前存在但是任何已知节点均不可达的对象

git总结 —— 切换到分支时提示提交或暂存修改_第5张图片
这里通过每个 commit 的查看,来查找误删的记录,以第一个 commit 举例看:

git show d1208e13ec214056e904cc73dd0de28b3ecf554c // 查看指定节点的信息
git stash apply d1208e13ec214056e904cc73dd0de28b3ecf554c // 恢复指定节点信息到当前工作区

总结

git stash 将用户做过的修改存放在本次 stash 产生的暂存数据中,并将已经修改的文件恢复至未修改状态。当用户恢复暂存数据时,则将上述修改应用到当前分支上。

  • git 官方已经预想到了需要将本地修改暂存,且在某一个分支上再次弹出的情况,这就是 git stash 的使用场景;
  • git stash 存储后的栈数据记录,只要是在同一个工程下不论是哪个分支,均可进行弹出以同步修改;
  • 再有一个场景,就是远程分支已经更新,且存在与本地修改存在冲突的地方,则这时可以通过 git stash branch 直接新建一个分支继续维护当前开发【功能待实践】;

参考资料

1. git 学习笔记 —— 保留/丢弃当前分支修改并切换至其他分支
2. Git doc - git stash;(命令行 git stash --help 查看)

你可能感兴趣的:(生产力工具,git)