本节概要
- git branch (创建分支)
- git tag (给固定的commit做标记)
- git checkout (在分支之间切换)
- git stash (这样在切换分支之前保存本地修改)
- git merge (合并分支)
当我们在一些其他的工作不想直接在master分支上做的时候,比如:增加一些新特性,或者问题的修复,测试等,这是偶,可以创建分支branch。
|
|
注,2个分支的 master.txt 内容不一样
git tag
branch 总是指向最新的commit,当需要指向固定的commit时,可以使用 git tag。比如,用于release 时候,打个tag,便于,出现问题,回滚道上一次tag状态。
命令格式: git tag tagname hash
|
|
git show 用开查看对象信息
如果用git checkout 切换到某个tag 上,由于tag 无法记录修改历史,会建议你用当前的tag建立一个分支
|
|
git stash 用法
在一个分支中做了修改,并更新了暂存区,没有commit,这时,切换分支的化,会提示,将会丢失暂存区的内容,可以使用git stash 来保存此分支的工作区,和暂存区的状态,但并未提交
|
|
git stash list 列出了所有stash对象,可以用 git stash pop 或者 apply 来还原工作区和暂存区
删除 stash
删除所有 stash
合并分支
|
|
处理冲突,这里,我在master 上删除了 master.txt
放弃合并
总结:
- 分支是一个commit的引用,在这些分支上工作,会产生各自的历史。
- 切换分支,就是HEAD引用的移动,以及工作区和暂存区的还原。
如下图,在commit(58ac6) 创建了分支 test,并进行了2次 commit,同时master 也 在commit(58ac6)向后继续开发
fast-forward-merage,快速合并,会丢弃一些历史commit,如下图
non-fast-forward-merge ,也称“三方合并”,会生成一个新的 commit 来记录修改历史
一般,系统会自动判断是否使用 non-fast-forward-merge,也可以显示声明使用
- –no-ff 显示告诉Git不要fast forward
- cherry-pick
- –squashgraph LR hd(HEAD) master(master) test(test) c1(3a789c) c2(678779) c3(5b8ac6) c4(2df781) c5(ac2dfc) m1(fa2dcc) m2(ac255c) m3(8f29a3) ma(578c2a) c5 --> ma m3 --> ma c1 --> c2 c2 --> c3 c3 --> c4 c4 --> c5 c3 --> m1 m1 --> m2 m2 --> m3 master --> ma hd --> master test --> c5 style c1 fill:#85f801 style c2 fill:#85f801 style c3 fill:#85f801 style c4 fill:#85f801 style c5 fill:#85f801 style m1 fill:#85f801 style m2 fill:#85f801 style m3 fill:#85f801 style ma fill:#85f801 style master fill:#a63a30 style test fill:#a63a30