首先声明:这不是一篇git使用手册或者指南,如果要详细的git使用指南,下面是廖雪峰的git教程,可以系统学习廖雪峰的git教程,当然,如果你想马上以一种正确的方式使用git,那么接下来你很快就会学会如何正确使用.前提是你已经知道git这个工具.并且想用它来管理你的代码.
在继续往下读之前,你需要确定两件事.
1:你的电脑上已经安装git,如果没有,照着这个方法去装:git安装
2:你已经拥有一个github账号,当然我也是github的账号.没有的话那就申请一个.
一:版本库的建立
1:首先我需要在我的github账号上新创建一个我的”远程仓库”,名叫”pragit”
2:我在我的家目录下创建了一个名叫git的目录,在它下面我又继续创建了两个目录,一个叫init(表示我要从本地建立仓库),一个叫clone(表示这个仓库是我克隆来的).
3:直接克隆到本地,切换到clone目录中.执行下面操作就可以(推荐使用)
4:直接从本地初始化,我们进入init目录中,然后执行下面操作,最后我们将远程仓库中的README.md拷贝到我们的本地.
好的,这就是我们建立版本库的两种方式啦,个人更推荐第一种方式:简单,安全,省事.
二:本地的各种修改
之所以叫本地的各种修改,原因是这部分我们都是在未push到远程仓库之前所干的活或者会犯的错误,我们需要有这样的概念,有关git的几个区域.
工作目录:就是我当前代码保存的目录,比如上图中的/home/student/git/init目录,那就是我的一个工作区.
暂存区:执行git add 命令之后,我们的代码就会到这个暂存区中去,等待被commit
本地仓库:每当我们执行一次git commit的时候,会将现在暂存区域中所有代码放到我们的本地仓库.
远程仓库:就是github上我们的仓库,执行git push 就是将本地仓库中的东西提交到远程仓库.
来来来,直接上图:
1:一次正确的提交,我下面就以提交file为例,执行完成后,你的代码就在github远程仓库里了.
2:多次修改,版本回退,撤回操作,删除文件,添加”.gitignore”文件
多次修改:假设你已经将file1文件 commit到本地仓库了,但是你又修改了它,那么我们git status 会得到”modified”提醒,git diff 命令可以帮助我们发现不同,解决方法,要是这种修改是你本身主动的,那么再次add就好.要是是你无意中改的,下面图片就能解决问题.
版本回退:我们继续修改file1的内容,继续提交,再修改,再提交,我们每次commit的版本都会作为一个版本保存起来,当然,如果我们commit上千次,那么这么多版本我们自己肯定记不住,这时候git log 命令横空出世解决了这个问题.而且我们可以用git reset –hard ID(版本号码) ,当然还有git reflog来查看我的命令历史.下面我们回退一个版本.
注意:我们将有”+++something”的版本回退到”++something”的版本,顺便解释下ID,就是我们git log 中commit那一行的前六位.
撤回操作:我们再次修改file1文件,然后我们push add ,但是此时我们反悔了,我们不想add他们了,我们就可以执行下面操作,这样会回到我们的第一种情况,再按照第一次的方法执行就好,注意git reset HEAD file1 命令.
删除文件:我们经常会在目录下删除不想要的文件,但是要是文件被我们add之后或者commit之后怎么办呢,我们先来看下会怎么样,我们以删除file1文件为例:
看到了吧,效果就是它会提醒你可以放弃你刚才的操作,当然你也可以直接git rm file1 删除文件,但是我们需要将这个修改的结果commit到我们的本地仓库来更新我们的本地仓库.这样才能保证暂存区和仓库的信息一致呀.如下:
添加”.gitignore”文件:为了让我们的github远程仓库不那么乱,便于别人或自己看,即不想出现一些例如a.out的文件,那么我们可以编写一个”.gitignore”文件传上去,这样,我们以后要是add这种文件,git 默认不会添加,但是用”-f”参数也可以强制添加.
三:分支管理
正确的多人协作开发产品的方法是我们会有一个master主分支作为我们的版本发布,我们工作的分支假设叫workbranch,那么我们几乎每个开发人员完成的代码都会提交到workbranch上,但是我自己要是直接在workbranch上工作,那么要是我的代码某天未完成(BOSS要求每天都有工作进度,就是每天有提交记录),那我要是提交到workbranch,其他人是无法工作的,那么解决方法就是我在我的本地再次分出一个yang分支,我自己去工作,要某部分代码要好几天完成,那我就每天提交到我的yang分支,全部完成之后在提交到workbranch,这样我每天的工作进度也就有了.下面我创建一个workbranch分支和yang分支,然后在yang分支上修改file,再演示几种不同情况:
正常被合并:我们在yang分支上的修改在yang上可见,但是在别的分支上就是不可见的,但是当我们切换到别的分支的时候会有提醒,所以我们合并就好了
注意:
git branch 查看目前分支
git branch 分支名 可以创建一个分支,但是不会切换过去
git checkout -b 分支名 不仅创建分支,而且切换到这个分支
git checkout 分支名 切换到这个分支
git branch -d 分支名 删除这个分支
git branch -D 分支名 强行删除这个分支
git merge 合并分支.
好,我们继续,下面我们就去在master主分支上合并yang分支,最后我们可以看到file的内容已经由”hello”变成了”nihao”.
手动合并冲突:当我们刚才在分支yang上修改过file的内容之后,我们再次切换到master主分支,未知情况下又修改,当然,这种情况肯定发生在你和同事之间,git此时会智能的提醒我们有冲突.git status 会显示冲突位置.
那么我们再次手动修改file文件,解决冲突,然后add ,commit之后就好了.当然我们还会遇到这样的问题,要是我们的同事已经将file修改并且从他那里push到我们的远程仓库了,当我们再次修改file并且push,此时会提醒我们有冲突,我们需要git pull 将最新的东西拉倒我们的本地,然后手动解决冲突就行了.
之后我们从另一个目录模仿你处理同事已经修改过的file
- 遇到bug怎么办:简单的一句话,我们遇到bug之后,自己重新建立一个分支,我们对于这种解决bug的分支就叫bug分支,自己单独去修复bug,然后合并,之后删除bug分支就行了,一般遇到问题都是这样处理的.
四:github多人协作的使用
当然git是一个多人使用的工具,我们用它来协同开发项目,这样才能体现它的强大与方便,下面以我们小组现在正在一起写的一本开源书籍(Linux-Book)为例,欢迎大家积极fork之后修改,如果合理,将被采纳,为大家介绍fithub多人协作的使用.
1:首先欢神(一个屌屌的学长)需要在小组的github上建立我们的版本库
2:我如果要参与,就需要将它从小组的github账号上fork下来.就是图片右上角的”Fork”
3:然后我就可以在自己的github上看到这个仓库了.如图所示
4:接下来我就不用多说了吧,两种方式在本地建立自己的版本库,我比较推荐第一种克隆的方式(注意:一定要在自己的github账号下克隆,否则你没有权限push东西上去).好,我现在已经克隆好了.
5:现在的操作无非就是我们第二大点写的各种在本地的操作,就不用多说了,假设我现在写了一个文件file,push之后会到我的远程仓库,那我应该怎样合并到小组github上呢,这就需要我们pull requests,相当于我发送一个提交的请求给欢神,他要是觉得可以通过,那么他就回merge我的东西,这样,我写的东西就会在小组github上了.如下所示:
然后我去自己的github账号建立pull requests.可以看到file刚被push上来,Pull requests 很容易找到,右边图标列的第一个就是.
时候我建立pull requests ,注意这里选择的时候, “head fork” 始终表示最新的东西,”base fork”表示要求同步的,即落后的,我现在自己添加了file,小组的github上仓库相对于我的已经落后,那我就让我的作为”head fork”,这样点绿色按钮创建Pull requests之后,欢神就会看见
6:要是别的小伙伴更改了东西,欢神同意之后,我的版本库就是落后的了,方法一样,继续Pull requests,只是变一下”head fork” 和 “base fork “就好了,git会自动检测不同,然后merge,之后在你本地执行 ” git pull “命令,将自己的远程仓库和本地仓库同步就行了.
好了,如果你一直读到了这儿,那么我相信你可以以一种正确的方法去使用git,当然,这个神奇的工具还有好多地方我没有说到,比如它的标签管理等等,但是我已经说过这不是教程啦,希望对你有帮助,也希望你积极评论,欢迎一起交流技术.