参考链接: https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
一般都与 dev 分支进行合并
Bug 分支
Bug 分支也是一个分支, 他甚至和前面创建的分支没有区别, 只是在 Git 中, 分支是如此的强大, 以至于在修复 Bug 的时候, 所以, 每个 bug 都可以通过一个新的临时分支来修复, 修复后, 合并分支, 然后将临时分支删除. 所以
首先确定要在哪个分支上修复 bug, 假定需要在 master 分支上修复, 就从 master 创建临时分支:
- $ Git checkout master
- Switched to branch 'master'
- Your branch is ahead of 'origin/master' by 6 commits.
- (use "git push" to publish your local commits)
- $ Git checkout -b issue-101
- Switched to a new branch 'issue-101'
现在修复 bug, 需要把 "Git is free software ..." 改为 "Git is a free software ...", 然后提交:
- $ Git add readme.txt
- $ Git commit -m "fix bug 101"
- [issue-101 4c805e2] fix bug 101
- 1 file changed, 1 insertion(+), 1 deletion(-)
修复完成后, 切换到 master 分支, 并完成合并, 最后删除 issue-101 分支
保存现场
Bug 分支在使用起来和之前的分支并没有什么不同, 依旧是众所周知的创建 / 修改工作 / 添加 / 提交 / 返回 master / 合并 / 删除 bug 分支. 这并没有什么好讲的.
特殊的是一种在我们准备创建 Bug 分支的时候可能会遇到的一种意外情况, 就是我们正在 dev 分支上的工作还没有达到能够提交的要求. 即我们的工作区还有文件 (使用 Git status 来查看是否有改动还没有提交). 而在我们创建新的分支的时候, 操作的对象就是当前工作区中的内容.
- $ Git status
- On branch dev
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: hello.py
- Changes not staged for commit:
- (use "git add <file>..." to update what will be committed)
- (use "git checkout -- <file>..." to discard changes in working directory)
- modified: readme.txt
幸好, Git 还提供了一个 stash 功能, 可以把当前工作现场 "储藏" 起来, 等以后恢复现场后继续工作:
- $ Git stash# 这就好了
- Saved working directory and index state WIP on dev: f52c633 add merge
现在, 用 Git status 查看工作区, 就是干净的 (除非有没有被 Git 管理的文件), 因此可以放心地创建分支来修复 bug.
当 bug 修复好了后. 是时候接着回到 dev 分支干活了!
- $ Git checkout dev
- Switched to branch 'dev'
- $ Git status
- On branch dev
- nothing to commit, working tree clean
工作区是干净的, 刚才的工作现场存到哪去了? 用 Git stash list 命令看看:
- $ Git stash list
- [email protected]{
- 0
- }: WIP on dev: f52c633 add merge
工作现场还在, Git 把 stash 内容存在某个地方了, 但是需要恢复一下, 有两个办法:
一是用 Git stash apply 恢复, 但是恢复后, stash 内容并不删除, 你需要用 Git stash drop 来删除;
另一种方式是用 Git stash pop, 恢复的同时把 stash 内容也删了:
- $ Git stash pop
- On branch dev
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: hello.py
- Changes not staged for commit:
- (use "git add <file>..." to update what will be committed)
- (use "git checkout -- <file>..." to discard changes in working directory)
- modified: readme.txt
- Dropped refs/[email protected]{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)
再用 Git stash list 查看, 就看不到任何 stash 内容了:
你可以多次 stash, 恢复的时候, 先用 Git stash list 查看, 然后恢复指定的 stash, 用命令:
$ Git stash apply [email protected]{0}
小结
修复 bug 时, 我们会通过创建新的 bug 分支进行修复, 然后合并, 最后删除;
当手头工作没有完成时, 先把工作现场 Git stash 一下, 然后去修复 bug, 修复后, 再 Git stash pop, 回到工作现场.
Feature 分支
参考链接: https://www.liaoxuefeng.com/wiki/896043488029600/900394246995648
这也是分支的另一种叫法
添加一个新功能时, 你肯定不希望因为一些实验性质的代码, 把主分支搞乱了, 所以, 每添加一个新功能, 最好新建一个 feature 分支, 在上面开发, 完成后, 合并, 最后, 删除该 feature 分支.
有时也可能会遇到一些额外的情况, 比如你在新建的 Feature 分支中已经把新功能写好了, 就在你切回了 dev 分支, 正准备合并的时候, 突然接到要求说这个功能取消了, 即使写好了, 虽然白干了, 但是这个包含机密资料的分支还是必须就地销毁:
- $ Git branch -d feature-vulcan
- error: The branch 'feature-vulcan' is not fully merged.
- If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
销毁失败. Git 友情提醒, feature-vulcan 分支还没有被合并, 如果删除, 将丢失掉修改, 如果要强行删除, 需要使用大写的 - D 参数..
现在我们强行删除:
- $ Git branch -D feature-vulcan
- Deleted branch feature-vulcan (was 287773e).
小结
开发一个新 feature, 最好新建一个分支;
如果要丢弃一个没有被合并过的分支, 可以通过 Git branch -D <name > 强行删除.
来源: http://www.bubuko.com/infodetail-3110333.html