ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Git stash,git reset --soft 的相关应用

2022-07-15 10:00:58  阅读:187  来源: 互联网

标签:reset git -- stash commit soft


前言

使用 Git 作为代码版本管理,已经是开发工程师必备的技能。可很多人还是只会最基本的保存、拉取、推送等简单命令。

本文分享我在开发工作中用到过的实用命令。的确是能够大大提高工作效率,还能解决不少疑难场景。

stash

描述

官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。

stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。

应用场景

我猜你心里一定在想:为什么要变干净?

应用场景:某一天你正在 develop 分支开发新需求,突然经理跑过来说线上有bug,必须马上修复。而此时你的功能开发到一半,于是你急忙想切到 master 分支,然后你就会看到以下报错:

 

 

 

因为当前有文件更改了,需要提交commit保持工作区干净才能切分支。由于情况紧急,你只有急忙 commit 上去,commit 信息也随便写了个“暂存代码”,于是该分支提交记录就留了一条黑历史…

命令使用

如果你学会 stash,就不用那么狼狈了。你只需要:

git stash  

就这么简单,代码就被存起来了。

当你修复完线上问题,切回 develop 分支,想恢复代码也只需要:

git stash apply  

相关命令

# 保存当前未commit的代码  

git stash  
  
# 保存当前未commit的代码并添加备注  

git stash save "备注的内容"  
  
# 列出stash的所有记录 
 
git stash list  
  
# 删除stash的所有记录  

git stash clear  
  
# 应用最近一次的stash 
 
git stash apply  
  
# 应用最近一次的stash,随后删除该记录 
 
git stash pop  
  
# 删除最近的一次stash
  
git stash drop  

当有多条 stash,可以指定操作stash,首先使用stash list 列出所有记录:

$ git stash list  
stash@{0}: WIP on ...  
stash@{1}: WIP on ...  
stash@{2}: On ...  

应用第N条记录:

$ git stash apply stash@{n}  

pop,drop 同理。

 

reset --soft

描述

完全不接触索引文件或工作树(但会像所有模式一样,将头部重置为)。这使您的所有更改的文件更改为“要提交的更改”。

回退你已提交的 commit,并将 commit 的修改内容放回到暂存区。

一般我们在使用 reset 命令时,git reset --hard会被提及的比较多,它能让 commit 记录强制回溯到某一个节点。而git reset --soft的作用正如其名,--soft(柔软的) 除了回溯节点外,还会保留节点的修改内容。

应用场景

回溯节点,为什么要保留修改内容?

应用场景1:有时候手滑不小心把不该提交的内容 commit 了,这时想改回来,只能再 commit 一次,又多一条“黑历史”。

应用场景2:规范些的团队,一般对于 commit 的内容要求职责明确,颗粒度要细,便于后续出现问题排查。本来属于两块不同功能的修改,一起 commit 上去,这种就属于不规范。这次恰好又手滑了,一次性 commit 上去。

命令使用

学会 reset --soft之后,你只需要:

# 恢复最近一次 commit  
git reset --soft HEAD^  

reset --soft相当于后悔药,给你重新改过的机会。对于上面的场景,就可以再次修改重新提交,保持干净的 commit 记录。

以上说的是还未 push 的commit。对于已经 push 的 commit,也可以使用该命令,不过再次 push 时,由于远程分支和本地分支有差异,需要强制推送git push -f来覆盖被

reset 的 commit。

还有一点需要注意,在reset --soft指定 commit 号时,会将该 commit 至最近一次 commit 的所有修改内容全部恢复,而不是只针对该 commit。

举个例子:

commit 记录有 c、b、a。

提交的时间c>b>a

reset 到 a。

git reset --soft 1a900ac29eba73ce817bf959f82ffcb0bfa38f75  

此时的 HEAD 到了 a,而 b、c 的修改内容都回到了暂存区。

 

 

标签:reset,git,--,stash,commit,soft
来源: https://www.cnblogs.com/BeiLiuZgq/p/16480251.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有