分享一个 git stash 的实际使用场景。

  1. 当我将新的变更记录提交为 git commit --amend 后,发现这需要修改云端上的提交记录,也就是 vscode 中会出现这张图

  2. 于是,我通过 git reset head^ 撤销掉刚刚的提交。

    reset 前:

    reset 后:

  3. 但在撤销的同时,我也丢失了最新的提交记录。不过我并不担心,因为我还有云端上的记录,所以我可以简单的直接将云端上的提交记录合并到当前分支

    sh 复制代码
    git merge origin/note-readme
  4. 需求来了,由于我 reset 后的变更还存储在工作树中,所以此时我不能执行 merge 操作。这个时候,大多数人的想法应该是这样的:

    1. 先拷贝变更的内容,
    2. 然后 discard 工作树
    3. 执行 merge 操作
    4. 再将刚刚变更的内容拷贝回来

    嗯,这是一种解决方法,但这也太麻烦了,我们完全可以通过 stash 简化上面过程:

  5. 使用 stash 的步骤如下:

    1. 同样是拷贝变更内容,只不过我们是通过 git add . && git stash save "先拷贝变更内容" 命令进行拷贝!

    2. 然后合并云端分支 git merge origin/note-readme

    3. 现在,我们就恢复到最开始的时候了!也就是文章开始之前,还没之前 git commit --amend 之前

    4. 最后, 只需要再将刚刚变更的内容拷贝回来,就可以了。方式时运行 git stash pop 命令。

总结上面过程

  1. 编辑内容
  2. git add . && git commit --amend
  3. 发现与云端冲突
  4. git reset head^ 撤销刚刚的变更(同时撤销了原有的提交)
  5. git add . && git stash save "先拷贝变更的工作树中的变更"
  6. git merge origin/note-readme 再将云端的提交合并过来
  7. git stash pop 将刚刚拷贝的内容拿出来
  8. git add . && git commit -m "新的提交" 重新提交

[!TIP]

git stash pop 命令默认会将藏匿区中最新的内容恢复到当前工作目录中,并从 stash 栈中删除它。但如果恢复的内容和已有内容出现冲突时,则不会自动从 stash 中删除。这个时候,你可以通过 git stash drop ${0} 显式删除删除。其中的 ${0} 可能需要根据情况进行修改。你可以通过 git stash list 查看 stash 栈中的所有内容。

相关推荐
LXL_249 分钟前
Git_撤销本地commit_查找仓库中大文件
git
yg_小小程序员1 小时前
鸿蒙开发(16)使用DevEco Studio上的Git工具进行多远程仓管理
git·华为·harmonyos
每天八杯水D6 小时前
Git完整使用经历
git
xianwu5438 小时前
反向代理模块。开发
linux·开发语言·网络·c++·git
前端_库日天10 小时前
部署自己的git托管平台
git·ubuntu·docker
神仙别闹12 小时前
基于C#实现的(WinForm)模拟操作系统文件管理系统
java·git·ffmpeg
刘大辉在路上1 天前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
落落鱼20131 天前
cenos如何升级git到2以上版本
git
Domain-zhuo1 天前
Git常用命令
前端·git·gitee·github·gitea·gitcode