前面的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 游离问题
错误:
解决方案,参考文章: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 rebase
和git merge
的区别,谨记git rebase
的黄金法则,参考这里或者这里(科学上网). - 关于
git merge --squash
和git rebase
区别,了解一下. - 最后,如何保证主干分支的提交历史的简洁可追溯可回滚,一般操作,了解下.
4. git revert撤销合并请求
git revert
为撤销一次提交操作,git reset
为回滚到某次提交的操作,再次重申。- 当使用
git revert
来撤销一次合并的提交时,会报错,需要使用-m
来指定一下要恢复的版本线。
git revert fcd8a10 -m 1 #撤回提交的commit id:fcd8a10 1代表当前分支 2代表在当前分支 merge的分支
说明
- 虽然上面贴出了解决方案,但是,比较遗憾的是自己还没有把我的需求整理处理,后期有机会会把博客的主题模块独立出来,进行单独的管理。
- 文章众多引用,首先感谢原作者,然后,本文仅供用于学习笔记,有助以后回顾,切勿用于商业用途。
other
学习git比较好的可视化操作项目learnGitBranching
更多git学习内容持续更新中…