一、分支管理策略
通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用 Fast forward 模式,Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下 --no-ff 方式的 git merge
1、创建 dev 分支,修改 txt 并提交
我们创建新的 dev 分支,修改 txt 文件,推到暂存区并提交至本地仓库
git checkout -b dev git branch git add readme.txt git commit -m "add merge"
2、切换至主分支并合并
切换到 master 主分支,准备合并(请注意 --no-ff 参数,表示禁用 Fast forward)
git checkout master git merge --no-ff -m "merge with no-ff" dev
3、查看分支历史
git log --graph --pretty=oneline --abbrev-commit
摘自 廖雪峰的官方网站
二、Bug 分支
Bug 可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
1、不具备提交条件的 dev 分支
当我们正在 dev 分支上进行工作还没有提交(并不是不想提交,而是工作了一半,没法提交),这时出现了一个要紧急修改的 Bug,我们便可以使用 stash 功能,把当前工作现场“储藏”起来。
git branch git status
2、储藏工作现场
我们使用 stash 把当前工作现场(未完成的 dev 分支)储藏起来,之后查看状态(很干净)
git stash git status
3、修复 Bug
假定我们要在 master 分支上修复 Bug(代号 101)
我们要进行以下 Bug(代号 101)的修改
我们首先切换到 master 分支,之后创建一个临时分支 issue-101,并提交
切换至 master 分支,合并
至此,Bug 修复完成
git checkout master git merge --no-ff -m "merged bug fix 101" issue-101
4、恢复 dev 分支
我们先切换到 dev 分支,查看当前状态
git checkout dev git status
Git 把 stash 存放在某个位置了,我们需要找回工作现场 dev 分支
之后我们需要对其进行恢复(两种方法)
方法一:用 git stash apply 恢复,但是恢复后,stash 内容并不删除,我们需要用 git stash drop 来删除
方法二:用 git stash pop,恢复的同时把 stash 内容也删了
之后删除 issue-101 分支,查看当前分支情况(要丢弃一个没有被合并过的分支,可以通过 git branch -D <name> 强行删除)