目录
0.前言
1.概念
1.1版本控制系统功能
1.2版本控制系统类型
1.3 Git和Github
2.Git和GitHub使用
2.1GitHub上获取任务代码
2.2在本地建立git仓库(local repository)
2.3使用git管理本地开发--将代码提交到Github上
3.Git中的Object Graph(存在仓库的.git directory中)
3.1Git详细指令功能
3.2Git指令与object graph的相应变化--示例
什么是git;git和GitHub使用方法;object graph相关内容(这也是困扰我很久的地方QAQ)
(1)回滚到前一个版本(2)比较两个版本的差异(3)备份(4)合并(5)在多个开发者之间实现共享、协作(6)记录每个开发者的动作,便于审计
(1)本地版本控制系统(local VCS):仓库在开发者本地机器,无法实现共享协作
(2)集中式本本控制系统(Centralized VCS) :仓库在独立的服务器,支持多开发者之间的协作
(3)Distributed VCS:仓库在独立服务器和每个开发者的本地电脑
Git是一个分布式版本控制系统,Github是一个社区,只支持git分布式系统,所以故名成为github。
(1)打开cmd,输入 cd D:\...\...(要把远程仓库放在哪一个路径,这里是放在D盘的某个位置,可以根据需要进行更改)
注意:输入该行命令后,可能路径还是没有显示到对应位置,输入D:,按回车即可(这里的D是因为我前面的路径在D盘,可以根据需要修改)
(2)打开GitHub网页版可以直接找到仓库的SSH链接,复制该链接
(3)回到cmd,输入git clone ssh链接
打开cmd 输入 cd D:\...\...(要在哪开辟仓库)
git init (将该路径下所有文件视为一整个仓库)
若已经建立好了git仓库,则输入下面命令将代码提交到GitHub上,承接2.2,在cmd中输入
git status (检查当前路径下的文件状态--是否commit,可以忽略)
git add *.* (将文件添加到暂存区staging)
git commit - m "name" (将staging中文件提交到本地仓库,将commit命名为name,可自己定义)
git remote (列出每个远程库的名字,用来检查有没有连上远程库or查看远程库名字,若没连过,这里为空,可以忽略)
git remote add origin 远程库的ssh链接 (与远程仓库进行连接,将远程库命名为origin,一般都这么命名,可以自定义)
git remote (列出每个远程库的名字,用来检查有没有连上远程库or查看远程库名字)
git push origin master:master (将本地仓库push到origin远程仓库的master分支中)
我们使用Git所做的操作clone,add,commit...都是在图的数据结构上的操作,这个结构存储了项目中文件的所有版本,以及描述这些更改的所有日志条目
Object Graph:版本之间的演化关系图,一条边 A->B表征了“在版本B的基础上作出变化,形成 了版本A
在进行commit操作的时候,Git会保存一个提交对象(commit object),一个commit就是object graph中的一个节点
分支(branch)
git的分支可以理解为一个指向commit的指针,指向该条分支的最新提交commit。而HEAD是一个特殊的指针,指向当前所在的本地分支
3个提交对象,两个分支master,testing
(1)git checkout branchName 切换到branchName分支
git checkout -b branchName 创建一个branchName分支,并将当前本地分支切换到该处
(2)git merge b 假设当前分支为a,将branchName合并到a上
①“快进”:当前的a指向的commit是b指向的直接上游
即Cb是在Ca上改动的,两者的merge就是Cb,将a指向Cb即可
②“非快进”,无冲突:修改的地方不同
两者的共同祖先设为Co,即Ca和Cb是在Co的版本上修改的结果,修改的位置不同,则Git会使用两个分支的末端所指的以及这两个分支的公共祖先Co,做一个简单的三方合并,得到一个新的commit
③“非快进”,冲突:Git暂停,等待处理
(3)git branch 显示当前所有分支
git branch -d branchName 删除branchName分支
git branch -v 显示每个分支最后一次提交
(1)初始:3个commit对象(c0,c1,c2),master指向c2,HEAD指向master(当前所在本地分支为master)
(2)输入指令:git checkout -b iss53 (创建一个名为iss53的分支,将当前本地分支切换到iss53)
(3)输入指令:git commit (提交一个新的commit对象,iss53指向c3,而master指向不变)
(4)输入指令:git checkout master(将当前本地分支切换到master分支)
(5)输入指令:git checkout -b hotfix
git commit (创建一个新的hotfix分支,提交一个新的对象c4)
(6)输入指令:git checkout master
git merge hotfix(将当前本地分支切换到master分支,将分支hotfix合并到master分支上)
由于master指向的commit是hotfix指向的直接上游,所以两者合并的结果就是C4
(7)输入指令:git branch -d hotfix (删除hotfix分支)