Git和Github

目录

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的相应变化--示例

 


0.前言

什么是git;git和GitHub使用方法;object graph相关内容(这也是困扰我很久的地方QAQ)

1.概念

1.1版本控制系统功能

(1)回滚到前一个版本(2)比较两个版本的差异(3)备份(4)合并(5)在多个开发者之间实现共享、协作(6)记录每个开发者的动作,便于审计

1.2版本控制系统类型

(1)本地版本控制系统(local VCS):仓库在开发者本地机器,无法实现共享协作

Git和Github_第1张图片

(2)集中式本本控制系统(Centralized VCS) :仓库在独立的服务器,支持多开发者之间的协作

Git和Github_第2张图片

(3)Distributed VCS:仓库在独立服务器和每个开发者的本地电脑

Git和Github_第3张图片

1.3 Git和Github

Git是一个分布式版本控制系统,Github是一个社区,只支持git分布式系统,所以故名成为github。

Git和Github_第4张图片


2.Git和GitHub使用

2.1GitHub上获取任务代码

(1)打开cmd,输入 cd D:\...\...(要把远程仓库放在哪一个路径,这里是放在D盘的某个位置,可以根据需要进行更改)

注意:输入该行命令后,可能路径还是没有显示到对应位置,输入D:,按回车即可(这里的D是因为我前面的路径在D盘,可以根据需要修改)

(2)打开GitHub网页版可以直接找到仓库的SSH链接,复制该链接

(3)回到cmd,输入git clone ssh链接

2.2在本地建立git仓库(local repository)

打开cmd 输入 cd D:\...\...(要在哪开辟仓库)

                       git init     (将该路径下所有文件视为一整个仓库)

2.3使用git管理本地开发--将代码提交到Github上

若已经建立好了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分支中)


3.Git中的Object Graph(存在仓库的.git directory中)

我们使用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

Git和Github_第5张图片

3.1Git详细指令功能

(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即可

Git和Github_第6张图片Git和Github_第7张图片

②“非快进”,无冲突:修改的地方不同

两者的共同祖先设为Co,即Ca和Cb是在Co的版本上修改的结果,修改的位置不同,则Git会使用两个分支的末端所指的以及这两个分支的公共祖先Co,做一个简单的三方合并,得到一个新的commit

Git和Github_第8张图片Git和Github_第9张图片

③“非快进”,冲突:Git暂停,等待处理

(3)git branch 显示当前所有分支

         git branch -d branchName  删除branchName分支

         git branch -v  显示每个分支最后一次提交

3.2Git指令与object graph的相应变化--示例

(1)初始:3个commit对象(c0,c1,c2),master指向c2,HEAD指向master(当前所在本地分支为master)

Git和Github_第10张图片

(2)输入指令:git checkout -b iss53 (创建一个名为iss53的分支,将当前本地分支切换到iss53)

Git和Github_第11张图片

(3)输入指令:git commit (提交一个新的commit对象,iss53指向c3,而master指向不变)

Git和Github_第12张图片

(4)输入指令:git checkout master(将当前本地分支切换到master分支)

Git和Github_第13张图片

(5)输入指令:git checkout -b hotfix

                           git commit (创建一个新的hotfix分支,提交一个新的对象c4)

Git和Github_第14张图片

(6)输入指令:git checkout master

                           git merge hotfix(将当前本地分支切换到master分支,将分支hotfix合并到master分支上)

由于master指向的commit是hotfix指向的直接上游,所以两者合并的结果就是C4

Git和Github_第15张图片

(7)输入指令:git branch -d hotfix (删除hotfix分支)

Git和Github_第16张图片

你可能感兴趣的:(软件构造,git,软件构建)