likes
comments
collection
share

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动

作者站长头像
站长
· 阅读数 33

前言

经常会遇到写代码写到一半,然后又有一个紧急BUG需要修复,然后当前改动的代码又不能提交到线上的情况,解决这个问题其中一个解决方案就是使用Git stash暂存目前修改过的代码,然后修BUG,把修完BUG改动的代码提交到线上,提交过后再进行暂存回退,继续开发修改之前的改动的代码。

对这个git功能我自己不是很熟悉,在公司的代码Git仓库中操作害怕失误,自己胡乱尝试操作Git会改动代码造成BUG(实际上就是自己菜),今天就实际从零开始操作一下,巩固一下Git操作知识。

新建仓库

既然从零开始,我就直接在自己的GitHub创建一个代码仓库,有兴趣的同学可以根据文章内容看看提交记录,深入了解 git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动 新建一个公开的仓库,名字叫:GitCommandStudy。

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动 该仓库的地址为: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分支

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动

假设线上有一个紧急的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 stash实践,当前代码暂存,提交其他代码改动后恢复当前改动 使用git status查看当前状态:

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动

1.使用git stash 暂存未提交的代码

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动

现在的工作区就干净了,看看状态:

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动 开始修BUG:

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动 2. 修完了,提交这个修改

git add git_command_study.py
git commit -m '修复紧急BUG'
git push origin main

3.提交修改,找回之前的修改的代码

使用git stash pop,然后看看现在的改动:

git stash实践,当前代码暂存,提交其他代码改动后恢复当前改动

完美解决了这个需求,修改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
评论
请登录