git进阶历程

前面的git养成日记中已经学习了git的基本的操作了,关键是养成使用git的习惯,那为什么还会有这篇文章呢?是因为我在使用git的过程中,也遇到了问题,所以写这篇文章是记录下自己的问题解决和需求的解决。

[toc]

前言

git高阶教程参考指南,git-recipes

一. 小知识点

开发分支

git clone #克隆下来的代码只做本地master分支和远程分支的关联

想要需要在其他分支上开发(存在其他远程分支),两种方式:

git checkout -b dev origin/dev #checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支

或者:

git checkout -b dev #新建并切换分支
git branch –set-upstream dev origin/dev #本地分支关联远程分支

其实下面两条命令合并起来就是上面一条。可通过下面的命令查看分支的关联情况

git branch -vv

仓库关联
如果在本地初始化的git仓库,在远程新建了远程仓库,通过下面的命令进行关联:

git remote add origin https://github.com/willhappy/will.git #origin 别名

二. git HEAD 游离问题

错误:
HEAD detached

解决方案,参考文章:D,感谢,不想重复造轮子了,就记录下,下次解决参考方便。

三. git 子模块

why?
关于为什么折腾git子模块呢,因为最近博客折腾的比较多,包括主题,在原来的主题上更改了很多,想着以后可以造福他人(QAQ完全臆想吖),想把主题单独从hexo的git仓库中给拿出来,单独管理,同时也方便他人使用更新过的主题。

解决
给予上面的需求,我开始查找解决方案,目前呢,git有两种解决方案:

  • git submodule #这是Git官方以前的推荐方案
  • git subtree #从 Git 1.5.2 开始,Git 新增并推荐使用这个功能来管理子项目

通过git submodule方式来解决,参考文章传送门,另外关于git子模块的管理查看传送门
通过git subtree方式解决,可参考文章传送门,发现这是有赞的帖子,很高兴,好好学习。也可以参考文章,这篇文章中也对比了这两种方式,可以好好看一下。

四. git-flow 的工作流程

关于git-flow,查看文章

五. 关于git分支管理策略

关于如何利用git进行team项目分支管理,参考阮一峰老师的Git分支管理策略

六. git命令常见问题及场景

1. master、origin master 与 origin/master 有什么区别?(参考

  • master 这个很好理解,它代表本地的某个分支名。
  • origin master 代表着两个概念,前面的 origin 代表远程名,后面的 master 代表远程分支名。
  • origin/master 只代表一个概念,即远程分支名,是从远程拉取代码后在本地建立的一份拷贝(因此也有人把它叫作本地分支)。

2. git revert和git reset理解。(参考)(科学上网)

  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。(git revert是撤销某次提交,不影响要撤销提交后面的提交;git reset是回滚到某次提交,会影响这次提交后面的提交,个人觉得这样理解比较好)
  • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

3. git rebase和git merge

  • 形象理解变基,参考这里(科学上网),解释很有意思,相信你会开心。
  • 搞清楚git rebasegit merge的区别,谨记git rebase的黄金法则,参考这里或者这里(科学上网).
  • 关于git merge --squashgit rebase区别,了解一下.
  • 最后,如何保证主干分支的提交历史的简洁可追溯可回滚,一般操作,了解下.

4. git revert撤销合并请求

  • git revert为撤销一次提交操作,git reset为回滚到某次提交的操作,再次重申。
  • 当使用git revert来撤销一次合并的提交时,会报错,需要使用-m来指定一下要恢复的版本线。
git revert fcd8a10 -m 1 #撤回提交的commit id:fcd8a10 1代表当前分支  2代表在当前分支 merge的分支

说明

  1. 虽然上面贴出了解决方案,但是,比较遗憾的是自己还没有把我的需求整理处理,后期有机会会把博客的主题模块独立出来,进行单独的管理。
  2. 文章众多引用,首先感谢原作者,然后,本文仅供用于学习笔记,有助以后回顾,切勿用于商业用途。

other

学习git比较好的可视化操作项目learnGitBranching

更多git学习内容持续更新中…


   转载规则


《git进阶历程》 Will 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
docker初识(博客环境准备) docker初识(博客环境准备)
为什么要开始学习docker呢?主要是自己博客home页部署在同事的阿里云上,但是,目前他的服务器已经快到期,所以我要对我的主页迁移,但是想到重现搭建生产环境的不确定性,决定研究下docker,同时也方便以后博客主页的迁移,也没必要为生产环
2018-06-11
下一篇 
hexo主题配置再升级--插件配置 hexo主题配置再升级--插件配置
关于hexo博客搭建的知识请移步GitHub+Hexo搭建个人博客, 主题样式等相对简单,中间也有几次对主题的更改更换,也在版本更新里面做了相应的记录,博客的实用性在于他不断地完善, 对读者更加的友善, 让读者也更感兴趣, 此节就是博客的
2018-05-06
  目录