Git高级篇

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41539074/article/details/100656124
1. 什么是分支(branch)
  • 分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响,所以在同一个数据库里可以同时进行多个修改
  • 在数据库进行最初的提交后,Git会创建一个名为master的分支,因此之后的提交,在切换分支之前都会添加到master分支里
2. Merge分支
  • Merge分支是为了可以随时发布release而创建的分支,他还能作为Topic分支的源分支使用
  • 保持分支稳定的状态是很重要的,如果要进行更改,通常先创建Topic分支,而针对改分支,可以使用Jenkins之类的CI工具进行自动化编译以及测试
  • 通常,会将master分支当作Merge分支使用
3. Topic分支
  • Topic分支是为了开发新功能或修复bug等任务而建立的分支。
  • Topic分支是从稳定的Merge分支创建的。完成作业后,要把Topic分支合并回Merge分支
4. 分支是我切换
  • 进行checkout时,git会从工作树还原向目标分支提交的修改内容
  • checkout之后的提交记录将被追加到目标分支
  • HEAD指向的是现在使用中的分支的最后一次更新。通常默认指向master分支的最后一次更新。通过移动HEAD指向,就可以变更使用的分支
  • 提交时使用~(tilde)和^(care )就可以指定某个提交的相对位置。最常用的就是相对于HEAD的位置,HEAD后面加上~(tilde)可以指定HEAD之前的提交记录。合并分支会有多个根结点,可以用 ^(caret)来指定使用那个根结点。例如:
    在这里插入图片描述
  • stash是临时保存文件修改内容的区域
  • stash可以暂时保存工作树和索引里还没提交的修改内容,可以事后在取出暂存的修改,应用到其他的分支
  • 还未提交的修改内容以及新添加的文件,留在索引区域或工作树的情况下切换到其他的分支时,修改内容会从原来的分支移动到目标分支
  • 但如果在checkout的目标分支中相同的文件也有修改,checkout会失败。这时,要么先提交修改内容,要么用stash暂时保存修改内容后再checkout
5. 分支的合并
  • 合并分支有两种方法:merge或rebase。使用这两种方法,合并分支后的历史记录会有很大差别
  • Merge保持修改内容的历史记录,但是历史记录会很复杂
  • rebase历史记录简单,是在原油提交的基础上将差异内容反映进去。因此,可能导致原本的提交内容无法正常允许
  • 主分支有两种,master分支和develop分支
  • master分支只负责管理发布的状态,在提交时使用标签记录发布版本号
  • develop分支是针对发布的日常开发分支
  • 特性分支(feature):topic分支的功用,这个分支是针对新功能的开发,基本上不需要共享特性分支的操作,所以不需要远端控制。完成开发后,把分支合并回develop分支后发布
  • release分支:是为release做准备的。通常会在分支名称的最前面加上release-。release前需要在这个分支进行最后的调整,而且为了下一版release开发用develop的上游分支。
  • 一般开发是在develop分支上进行的,到了可以发布的状态时再创建release分支,为release做最后的bug修正
  • 到了可以release的状态时,把release分支合并到master分支,并且合并提交里添加release版本号的标签
  • 要导入在release分支所作的修改,也要合并回develop分支
  • hotFix分支:在发布的产品需要紧急修正时,从master分支创建的分支,通常会在分支名称的最前面加上hotfix-。修改时创建的hotfix分支要合并回develop分支
6. 操作分支
  • 建立分支:git branch
  • 切换分支:git checkout
  • 合并分支:git merge
  • 删除分支: git branch -d
  • 并行操作: 当前分支的修改提交到master分支后,切换到其他分支后,其他分支还未更改,需要git pull
7.远端数据库
  • 执行pull可以取得远端数据库的历史记录
  • 执行pull,远程数据库的内容就会自动合并。但是,有时只是想确认本地数据库的内容而不想合并。这种情况下使用fetch
  • 执行fetch就可以取得远程数据库的最新历史记录。取得的提交会导入到没有名字是我分支,这个分支可以从名为FETCH_HEAD的退出
  • 实际上pull的内容是fetch+merge组成的
  • 使用git tag命令添加标签
8. 改写提交
  • 修改最近的提交:指定amend选项执行提交的话,可以修改同一个分支最近的提交内容和注解,主要使用场合:添加最近提交时漏掉的档案、提交最近提交的注解 git commit --amend
  • 取消过去的提交: 在revert可以取消指定的提交内容,使用rebase -i或reset也可以删除提交。但是不能随便删除已经发布的提交,这时需要通过revert创建要否定的提交 git revert HEAD
  • 遗弃提交:在reset可以遗弃不再使用的提交。执行遗弃时,需要根据影响的范围而指定不同的模式,可以指定是否复原索引或工作树的内容 git reset --hard HEAD
  • 复原修改过的索引的状态(mixed)
  • 彻底取消最近的提交(hard)
  • 只取消提交(soft)
  • 提取提交:在cherry-pick,可以从其他分支复制指定的提交,然后导入到现在的分支
  • 改写提交的历史记录: 在rebase指定i选项,可以改写、替换、删除或合并提交 git rebase -i HEAD

猜你喜欢

转载自blog.csdn.net/qq_41539074/article/details/100656124