git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动
前言
经常会遇到写代码写到一半,然后又有一个紧急BUG需要修复,然后当前改动的代码又不能提交到线上的情况,解决这个问题其中一个解决方案就是使用Git stash
暂存目前修改过的代码,然后修BUG,把修完BUG改动的代码提交到线上,提交过后再进行暂存回退,继续开发修改之前的改动的代码。
对这个git功能我自己不是很熟悉,在公司的代码Git仓库中操作害怕失误,自己胡乱尝试操作Git会改动代码造成BUG(实际上就是自己菜),今天就实际从零开始操作一下,巩固一下Git操作知识。
新建仓库
既然从零开始,我就直接在自己的GitHub创建一个代码仓库,有兴趣的同学可以根据文章内容看看提交记录,深入了解
新建一个公开的仓库,名字叫:GitCommandStudy。
该仓库的地址为:git@github.com:koala9527/GitCommandS…
本地电脑已经配置了SSH秘钥在Git账号里面,可以不需要鉴权直接提交代码到这个仓库中,在本地找一个文件夹新建一个README.md文件和一个git_command_study.py文件。 README.md写一些项目介绍,随意写写。 git_command_study.py文件写一个基于Python的web框架FastApi框架做最简单的例子吧:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def main():
return {"Hello": "World"}
if __name__ == '__main__':
import uvicorn
uvicorn.run(app,host ='0.0.0.0',port =8000 )
把这些代码提交到GitHub,参考创建完Git仓库后的提示依次执行一下命令:
git init // 初始化项目
git add . // 把所有的改动提交到本地
git commit -m "first commit" // 本次提交的备注
git branch -M main // -M则表示强制重命名
git remote add origin https://github.com/koala9527/GitCommandStudy.git // 添加远程分支
git push -u origin main // 以后即可直接用git push代替git push origin main
模拟需求
目前的代码,只有一个main分支
假设线上有一个紧急的BUG,需要把路由改成仅支持post请求,但是根据目前的需求我做了一下更改,把返回内容改成{"Hello": "FastApi"}
目前本地的代码:
...
@app.get("/")
def main():
return {"Hello": "FastApi"}
...
目前线上的代码:
...
@app.get("/")
def main():
return {"Hello": "World"}
...
需要紧急修改BUG把线上的改成下面的内容,但不能丢失当前的更改。
...
@app.post("/")
def main():
return {"Hello": "World"}
...
Git操作过程
先看看当前的更改
使用
git status
查看当前状态:
1.使用git stash
暂存未提交的代码
现在的工作区就干净了,看看状态:
开始修BUG:
2. 修完了,提交这个修改
git add git_command_study.py
git commit -m '修复紧急BUG'
git push origin main
3.提交修改,找回之前的修改的代码
使用git stash pop
,然后看看现在的改动:
完美解决了这个需求,修改BUG的代码也保存了,同时自己之前写的代码的改动也回来了,可以继续写代码了,完全不影响。
总结
git stash
作用就是存储当前分支下的所有改动
,这个命令还有更多的用法,例如多次储存,查看存储的列表,还可以给储存的内容添加备注,类似栈的概念,先进后出。但是学习知识还是需要循序渐进,学多了没有印象一下就忘记了,还是用什么学什么东西,这是我最近才思考出来的结果。
今天学习git stash
的知识是另外同事告诉我的,因为一个老项目代码只有一个分支,所以只能这样做,当时我只口头答应一下,按照他的讲的去执行了一遍,没有仔细了解实践,今天又清楚有效的回顾了一下,非常有用。
假如代码有多个分支呢?比如两个分支,一个develop分支,一个master分支,这样的话master分支有一个BUG需要修复,就新建一个分支,名称姑且叫做hotfix,把master分支代码合并到hotfix分支。然后在本地切换到这个hotfix分支就行修BUG的工作,修完了直接提交到线上的hotfix,直接用hotfix合并到线上。如果有代码冲突,就把修完的master往develop分支合并,本地develop向远程develop分支提交代码的时候处理代码冲突,这种显然就更繁琐,但是很安全,如今学到了git stash暂存代码改动遇到了需要紧急修复线上BUG又有不能提交的本地代码的时候的这种问题就很好很快地去处理了,不知道大家又有什么其他更好的方案呢?
转载自:https://juejin.cn/post/7126712333379993613