Git是一个分布式版本控制软件,最初由Linux之父林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNU Interactive Tools[6](一个类似Norton Commander界面的文件管理器)有所不同。
说起Git,人们都会想到SVN,那么他与SVN有什么区别呢,当然了区别很大,而且这种区别也是当今Git比较流行的原因,SVN是一个集中式的版本控制系统,在中央服务器存储版本库,当我们要开发项目的时候,要先从服务拉取项目,所以我们当我们想要最新的版本或者提交都需要通过中央服务器,如果要是没有网络呢又或者是网络太慢呢,那么想必大家此时心中会有一万个羊驼,哈哈,而Git是一种分布式的版本管理系统,它没有中央服务器,每一个人的电脑都是一个版本仓库,这样当我们完成项目的一个模块时,就可以在自己的电脑提交,而且此时操作是不需要网络,因为版本都是在自己的电脑上,那多个人如何协作呢?比如说你在自己的电脑上修改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git安装(Windows)
Git下载
Git下载链接https://git-scm.com/downloads,点击下载
我下载后的版本是这个当然根据系统选择是32位还64位,下载之后就很简单了,剩下就是傻瓜式的点击next,然后就会看到
此时点击Git Bash就启动了我们的Git,先体验一下,我们在命令行输入下面命令看看安装的版本
git –version
git –version
常用Git操作命令
初始化仓库 git init
先创建一个我们要管理的项目目录myTestGit,然后命令在此目录下创建仓库,初始化仓库后会在刚刚创建的文件夹下会有一个.git的文件,这个文件就是管理我们的仓库的,所有信息都在里面保存,不要删除该文件。
git config –global 配置用户名和邮箱
这项配置暂时用不到,配置账号和邮箱是当我们提交的时候用于区分提交人信息,便于团队协作。如果设置的话,当我们提交我们的书写的内容时会提示要配置邮箱和账户后才能提交。
git status查看状态
我们现在项目下创建一个README.md文件,里面写上内容Test my first git project,此时我们可执行此命令查看我们项目状态我们看到提示,已经添加README.md文件,此时仓库还没有追踪此文件,并且提示我们要用git add 命令将我们的文件添加到暂存区,那么此时我们就按提示操作
git add 添加到暂存区
我们用git add README.md 把我们加的文件放到暂存区。此时我们再用git status 查看,一个新文件假如了暂存区。
git commit提交我们的文件
提交后提示我们master(root-commit),此时在用git status查看提示没有提交,工作区是干净的,代表我们已经把刚才的内容提交了。
git log
此时我们用git log命令就可以看到项目的版本信息,包括提交人,提交时间和修改的文件等信息
GitHub项目托管
GitHub是一个利用Git进行版本控制、专门用于存放软件代码与内容的共享虚拟主机服务。它由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。
GitHub是全球最大的开发者社区,很多有名的开源项目都在GitHub有托管,当然大名鼎鼎的如Google,SQUARE等企业开源项目都在上面,还有很多优秀的个人。
在GitHub创建项目myTestGit
注册账号后登陆到GitHub,点击如下图右边New repository,然后在创建界面输入仓库名字(账号下项目名字不能重复),下面直接选择public,选择public可以让大家看到,当然如果你不想将自己的项目开源给大家,就需要选择private,当然这个是收费的。选择好后点击Create repository,就成功了。此时该项目就显示在上图Your repository列表中。
本地仓库关联GitHub上的仓库
现在GitHub打开我们刚刚创建的仓库,然后如下图,用红框标注的地方是就是我们项目的网址,记住此网站用Git命令关联此项目git remote关联仓库
现在虽然本地项目与GitHub项目已经关联,但是要想将本地更改push到GitHub还需要在本地生成ssh秘钥,配置到GitHub 做一个身份认证的东西.shh-keygen 创建公钥和私钥
ssh-keygen最后面试配置的邮箱账号执行命令后会让输入密码,直接按Enter键就行了,然后就出现图中形式就代表生成成功,按图中提示去响应目录找到如下图两个文件,两个文件一个id_rsa.pub是保存的公钥。
GitHub配置ssh
登录账号后点击verifying,如上图,选择SSH and GPG keys,然后选择New SSH key创建ssh。如下图,title我们可以随便输入,key就是刚刚我们生成is_ras.pub,文件里生成的公钥,然后点击Add SSH key 就成功了,接下来就可以push我们本地项目了。
git push 将本地项目的提交push到GitHub
执行命令后我们看到提示信息说已经写入成功。
此时我们再登陆GitHub查看我们的项目此时仓库已经和本地的仓库同步了,看到提交信息是2 days ago,那是因为我在本地提交README.md文件是两天前执行的,这也就更说明Git是分布式,每个电脑都是一个仓库。
接下来我们在本地仓库README.md里面输入新的一行,内容为add Content 1,然后用git status查看状态
我们看到我们提示我们更改了内容,那么怎么看我们修改了什么内容呢。可以通过git diff README.md,我们发现在在add content 1前面有一个+号,表示改行是新增加的内容,然后我们再按之前的方式提交我们的修改
版本回退
我们再通过git log 查看下版本
此时我们再注意下,版本是从近到远的顺序显示的,还有一个字段commit 后面是一串16进制数,这个是版本的唯一标示。
git log –pretty=oneline
如果此时感觉git log 显示的内容比较多,可以通过git log –pretty=oneline显示部分信息,如图,只显示版本号和版本描述信息git reset 版本回退
如果想回退到上一个版本,git reset –hard HEAD~1(想回退几个版本,数字就为几),也可以用命令git reset –hard HEAD^(想回退几个版本,就输入几个^)回退一个版本,
此时我们再用命令git log –pretty=oneline查看,发现描述信息为commit test content 3 的提交已经没有了。
那么问题来了,假如我们刚刚发现我们回退错版本了,怎么取消刚才的回退呢,我们发现git log 没有回退的记录。那么命令git reflog就登场了,执行后我们看到了我们执行回退的记录,此时我们可以用命令git reset –hard 44a1b1a
此时再看版本信息,发现描述信息为commit test content 3 又恢复了。
- git add .
- 当我们项目有多个文件要提交时怎么操作呢,我们再项目先创test.txt,test.txt,等文件,如图
那么此时我们可以按之前方式一个文件一个文件提交,单文件多了终归不是好办法,那么此时应git add .就搞定了 - git checkout
此命令可以取消我们工作区的更改(更改后,用git status命令会看到此命令提示)执行命令后,再查看状态发现文件修改内容已经取消了
创建分支
分支一般用于项目模块开发时,给成员分工,不同的人负责不同的模块,也就是管理不同的分支,当完成时一般再与主分支合并。
- git branch创建分支
创建分支成功后 查看分支发现master分支前有个*,表示当前操作分支是master。 git checkout切换分支
注意这个切换分支和撤销工作区的修改的区别。切换后效果如下。
注:创建和切换分支可以直接用git branch -b branchB
在分支branchB上修改README.md文件,增加一行内容branchB write
然后查看文件内容,发现已经存在增加的内容,
然后我们切换到master分支,查看内容发现没有刚才书写的内容
此时我们可以通过命令git merge branchB,将分支branchB和主分支合并
当我们合并完成后,也就可理解为branchB的功能模块已经完成,则可以将该分支删除
解决冲突
- git merge
先查看原本文件内容,如图
然后我们再分支branchA编辑文件,内容如下
再切换到master分支,修改如下内容
然后将branchA与master分支合并,如图提示合并冲突
我们打开文件发现 Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中< << HEAD是指主分支修改的内容,>>>>>branchA是指branchA上修改的内容。
我们可以修改下如下后保存,并提交解决冲突
分支常见操作
- git push origin
之前我们都是在本地创建分支后,并没有将分支推送到gitHub,那么这个命令就可以实现这个功能
然后在刚创建的分支更改内容并提交
此时我们登陆GitHub查看分支testbranch有个提交,
然后我们点击pull request,选择merge
现在分支提交的内容已经合并到master - git push origin :
合并之后再github可以删除分支,那么用Git命令怎么删除远端仓库的分支呢,那要用到这个命令了
到这里,Git的命令已经介绍了很多了,现在我们在看题目,为何是从入门到放弃,我是感觉Git我们只需要基本了解就可以了,因为Git的命令很多,真正熟练运用,需要花点时间去学习,毕竟命令行没有GitHub客户端操作方便,所以我们只需要去下载GitHub客户端(点击下载),安装成功后我们只需要在客户端就可以完成我们想要的效果,这比命令行方便了很多