Git 操作 - 未开发完成不能提交的情况下紧急切分支修复bug

252 阅读3分钟
  1. 首先储藏自己未提交的代码(dev 分支开发新功能)
git stash
Saved working directory and index state WIP on dev: e0dcd17 merge

此时你的工作区应该是干净的,查看 git status

git status
On branch dev
Your branch is up to date with 'origin/dev'.nothing to commit, working tree clean
  1. 现在来切换分支修复 bug ,假设需要新增一个 bug-fix-101 这个分支来修复bug
git checkout -b bug-fix-101
Switched to a new branch 'bug-fix-101'
​
# 正常修复 bug 进行提交
git add .
git commit -m ''
# 切换到需要修改bug的 dev 分支
git switch dev
witched to branch 'dev'
Your branch is up to date with 'origin/dev'.
​
git merge bug-fix-101
Updating e0dcd17..177f49e
Fast-forward
 bug.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
 
git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 264 bytes | 264.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:403NotFound/git-learn.git
   e0dcd17..177f49e  dev -> dev
   
# 删除bug-fix分支
git branch -d bug-fix-101
  1. 切换回未开发完的分支(此处就是dev分支,故不用切换)
# 查看储藏的文件内容
git stash list
stash@{0}: WIP on dev: e0dcd17 merge

恢复储藏的文件:一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了:

git stash pop
On branch dev
Your branch is up to date with 'origin/dev'.
​
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   test1.txt
​
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (00bca314ac86f25fb0756f1082fc1847f9753962)

这样就可以继续开发了,再次查看git stash list,会发现已经没stash内容了

git stash list

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}
  1. 当前bug修复只修复在了dev上面,一般,devmaster是同步的,那说明master上面一般也会存在这个bug,我们可以使用一个简便的方法将dev上面 bug fix 这次提交直接复制到master上面即可

    • 首先拿到fix bug这次的commitid (dev分支)
    git log
    commit 177f49e685030aa02067839df33d3c83f73b7cc3 (HEAD -> dev, origin/dev, bug-fix-101)
    Author: 403NotFound <1214972923@qq.com>
    Date:   Mon Aug 30 13:56:28 2021 +0800
    ​
        fix bug
    
    • 切换到 master 分支
    git switch master
    git cherry-pick 177f49e685030aa02067839df33d3c83f73b7cc3
    
    • 即可复制到master

cherry-pick这个操作就可以单独提取某一次 commit 到指定的分支