git 知识总结 -- 进阶篇

git 知识总结 -- 进阶篇

  • git 知识总结 – 进阶篇
    • 一、分支(branch)
    • 二、分支的操作
      • 1. 切换分支(checkout)
        • ① HEAD
        • ② stash
      • 2.合并分支
        • ① merge
        • ② rebase
        • ③ 区别
    • 三、A successful Git brandching model
      • 1.主分支
      • 2.特性分支
      • 3.release分支
      • 4.hotfix分支
    • 五、远端数据库
      • 1.pull
      • 2.fetch
      • 3.push
    • 六、标签

git 知识总结 – 进阶篇

一、分支(branch)

分支是数据库修改内容的分叉保存,即可以对一个项目同时分叉进行多个线路的修改,它们之间相互不会影响,并且可以合并。

不同用户可以设立自己的分支独立工作,在需要的时候进行总体的合并,每一个分支的修改记录也会被保存,对日后的纠错查因带来了很大的方便。

“Merge”分支: 作为一个随时可以发布release的分支,故要保证其稳定性,在对项目进行修改,添加新功能等时,一般先创建以Merge分支为源分支的Topic分支。
通常,我们直接用master作为Merge分支。

“Topic”分支: 为了添加功能,修复bug而建立的分支,从稳定的Merge分支创建,任务完成后再合并至Merge分支。
如果要同时进行多项任务,就创建多个Topic分支。

二、分支的操作

1. 切换分支(checkout)

checkout会使工作树的状态还原至目标分支的修改内容,切换分支后的提交将会追加在目标分支。

① HEAD

HEAD指向现在使用分支的最后一次更新,默认指向master的最后一次更新。通过移动HEAD指向,就可以达到对不同分支进行操作。

~(Tilde):可以指定HEAD之前的提交记录
^(caret):HEAD之前的提交记录存在合并,则会有分支出现,而使用caret可以指定哪一个节点状态作为根节点。

如图:
git 知识总结 -- 进阶篇_第1张图片

② stash

stash是临时保存文件修改内容的区域。

在未提交当前工作树或索引中的修改内容时进行checkout操作,会使修改内容从原来的分支移动至切换后的分支;

但切换后的分支中有相同的文件内容也被修改时,checkout操作会失败。

这时要么先提交修改内容再切换,要么可以将修改内容暂存在stash中,之后再取出并选择应用在哪一条分支上。

2.合并分支

① merge

merge可以合并多个历史记录的流程。

**fast-forward(快进)合并:**当topic分支(使用bugfix分支为例)合并至master分支时,master分支并没有进行修改,则可以使master的HEAD直接指向bugfix,这就是快进合并。
git 知识总结 -- 进阶篇_第2张图片

但大多情况下,bugfix合并时,master分支已经做了修改,此时合并需要让master和bugfix修改进行一次新的提交,HEAD指向此提交。
git 知识总结 -- 进阶篇_第3张图片
non fast-forward:此选项会让可以进行fast-forward合并的情况下仍进行一次新提交并合并。
git 知识总结 -- 进阶篇_第4张图片
优点:分支会维持原状,便于查找历史操作记录。

② rebase

rebase bugfix分支和master分支会让bugfix的历史记录添加到master分支后面,这时移动提交X,Y有可能会发生冲突,故需要修改冲突部分。

然后直接让master分支的HEAD指向bugfix分支的HEAD即可。
git 知识总结 -- 进阶篇_第5张图片

③ 区别

对于历史记录合并:

  • merge为保持所有的历史记录修改过程,这样的话,修改记录就会很复杂。

  • rebase合并的历史记录简单,实在原有历史记录的前提上把差异反映进去,这也导致可能合并后的原本提交内容无法正常运行。

三、A successful Git brandching model

1.主分支

master分支: 只负责管理发布版本的状态。提交时使用标签记录版本号。

develop分支: 针对发布的日常开发使用的分支。

2.特性分支

feature分支: 作用相当于topic分支,以develop分支作为源分支创建的分支,进行bug修复,新功能添加,任务完成后直接合并至develop分支发布新的版本。

ps:feature分支一般不需要共享特性分支的操作,故不需要远端控制。

3.release分支

release分支: 通常会在分支名称前加上release-。在develop分支上进行开发,到了可以release的时候,创建此分支,进行最后的bug修正等修改。修改完成后合并至master分支,并在合并提交时添加release的版本号。

完成之后也要把release分支的修改合并至develop分支继续进行开发。

4.hotfix分支

hotfix分支: 用于产品进行紧急修正时,通常在分支名称前加上hotfix-。
从master分支直接创建。

在develop分支开发尚不完整时,需要紧急修改,从develop分支开发至可以release的版本耗费时间太久,我们就从master分支上直接创建一个hotfix分支进行修改并合并分支。

完成之后也要把hotfix分支的修改合并至develop分支继续进行开发。

五、远端数据库

1.pull

过程为:首先确认本地的数据库是否更改,

若没有更改:
则本地的数据库master分支对远程数据库的master分支进行fast-forward合并并提交。

若有更改:
则需要合并双方的修改,pull使双方合并,若没有冲突,则直接合并提交;若有冲突,则需要手动解决冲突,再手动提交。

2.fetch

当不想自动合并只想取得远程数据库的内容时,使用fetch可以取得最新的历史记录并导入到没有名字的分支中,该分支可以从名为FETCH_HEAD的链接中退出。

这个状态下,如果需要合并,则可以合并FETCH_HEAD,或重新执行pull指令。

ps:FETCH_HEAD指向从远程数据库获取的历史记录中的末端最新版本。

3.push

push至远程数据库,要fast-forward合并push的分支。
如果发生冲突,push就会被拒绝。

ps:基本上,远程数据库的提交时不能修改的。

六、标签

标签是为了更简洁明了地参考提交而设置地一个名称。

Git可使用的有两种标签,分别是轻标签和注解标签。
标签是固定的,不可移动。

轻标签为

  • 添加名称

注解标签为

  • 添加名称
  • 添加注解
  • 添加签名

一般来说,轻标签用于本地暂时或一次性使用,版本发布标签用注解标签添加注解或签名。

你可能感兴趣的:(Git,learning,数据库,git)