GIT是个啥
GIT是一个版本控制工具。
什么是版本控制工具呢?首先说什么是版本 版本就是后悔药 每一个版本就是一颗后悔药那么版本控制工具就是管理后悔药的一个药箱。比如 当我们写一本小说时 需要经过多次修改才会发表 那么如果将每次修改后的内容稍加描述(每次修改后都称作一个版本) 这样当我们日后想要找回某一次修改前的内容时 就方便了许多。写代码也是如此。所以我们需要这样一个版本控制工具 也就是"后悔药"。
GIT是个分布式的后悔药,也就是说我们在使用它的时候可以不用联网,好几个人合作的时候可以各写各的代码,写完之后大家把代码推上去最后合并一下就可以了。非常方便。
安装和配置
git的官网:git-scm.com
进入官网找到上图点击download即可下载。
下载成功后打开命令行。
(windows下Windows+R输入cmd打开命令行)输入命令git --version查看我们安装的版本
这就证明我们安装成功啦~
配置
输入命令git config --global user.name "你的名字" git config --global user.email "你的邮箱"
注意:global的意思是往全局配置 我们在这里指定了全局 那么意味着以后建立的所有的项目都使用这个配置。
我们来看一下当前所配置的所有项目 输入命令:git config --list即可。
创建仓库
首先要知道一个概念 仓库 Repository
在GIT中把项目称作一个仓库,其实本质上就是文件夹。我们进入一个文件夹 输入命令git init
初始化了一个空的Git仓库。
出现了一个git目录 命令ls -la列出当前目录中的所有文件
这样就成功创建了一个仓库~撒花!
还有另外一种创建仓库的方式。
我们返回上级目录 直接输入命令cd ..
然后输入命令 git init 仓库名称这里我的仓库名称为test2
回车
这种方法跟我们手动创建test2 然后git init的效果的一样的。
第三种方法是直接到网上拷贝一个仓库。
比如我们到github上随便找一个大神的仓库
复制地址然后回到命令行
输入命令 git clone 复制的地址
就可以拷贝别人的仓库啦~
也可以重命名拷贝下来的仓库 比如我指定其为test3
以上为创建仓库的三种方式~
基本用法
首先我们创建一个仓库 名为xyj(自定义) 然后进入到这个目录
我们想知道刚创建好的这个仓库的状态 输入命令git status 查看仓库状态
Commit 提交
No commits yet意思是还没有历史记录现在我们再xyj目录中新建一个文件yo.txt 然后查看目前仓库的状态
Untracted files是指存在未被跟踪的文件(提示我们当前文件已经更改但是我们还没有造后悔药的意思)
输入命令git add . 意思是将所有修改添加至暂存区 然后查看仓库状态(git status)
接下来我们提交版本 输入命令 git commit -m "描述" 然后查看仓库状态
Nothing to commit,working tree clean.意思是当前没有可提交的文件。
git log 查看版本记录
"开始"可以理解为这颗后悔药的名字
commit后的一串字符可以理解为这颗后悔药的"身份证号"接下来我们在yo.txt中写一点东西进去 然后查看仓库状态
然后和前面步骤相同 首先将所有内容添加至暂存区 然后提交版本
现在我们就成功造了一颗后悔药。
红框内的字符为这颗后悔药的id。
现在我们已经造了两颗后悔药了 git log查看一下
当我们想退回到第一个版本时 拷贝第一个版本至少前7位的身份证号
输入命令 git checkout ### 穿越到指定的历史节点然后文件就变回到指定节点时的状态啦~三种状态
接着上面的说 首先我们回到之前的节点(不管之前的节点是什么)
输入命令git checkout -在git中,所有的文件做的任何一次commit操作都要执行以下三步:
- 修改文件 (modified已修改)
- git add . (staged已暂存)
- git commit -m "描述" (committed已提交)
git log -p 查看具体修改内容
tag标签
任何一个项目从开始到结束都有很多小版本,在这些小版本中有一些节点非常重要。比如说我写了一篇小说,已经成书了,这个时候我们就可以给它打一个标签,表示第一版完成(v1)。后来在第一版稍加润色完成第二版(v2)。v1和v2中间还可能有其它的小版本。但是这些小版本并不重要,读者不需要看到这些小版本。
我们首先init一个仓库并创建一个txt文件。
此时为第一个节点
修改文件并创建第二个节点
继续修改文件并创建第三个节点
git log --oneline 查看版本记录
最后一个版本是比较重要的,是完成度比较高的一个版本,所以我们可以给它打个标签。
git tag -a 标签名 -m "备注"
然后git tag列出所有标签
当我们想出版第二版时(注意:为了测试一定要修改此时的txt文件哦)
然后列出所有节点 git log --oneline
再做一点修改 步骤同上
此时我们想在这一节点发布小说的第二版(v2) 那我们就可以在这里给它打一个标签。
git tag列出此时的所有标签
但是比如我们想回到某一版本然后给该版本打一个标签该怎么做呢?把版本ID跟在后面即可
git show v1 查看某个标签的详细信息
git checkout 标签名 回至标签所在的提交
分支branch
分支就是在时间这个维度上允许存在多条线。比如说一本小说允许存在多条故事线。当我们一开始git init的时候,会创建一个默认的分支(master),我们创建的分支可以自定义名称。这样一来我们就可以在平行的世界中创建几个不同的版本,而且可以随意切换。
首先我们新建一个仓库
然后我们进入这个目录
在目录中新建一个txt文件
随意编辑内容并提交
在txt文件中随意修改内容并提交
现在在我们的master分支上应该有两个版本 我们git log --oneline查看一下
继续修改内容并提交
假如我们想在这个节点发展出一个分支
git branch 分支名 创建分支
然后切换到这个分支上 git checkout 分支名
现在是在rich这个分支上的
继续修改内容并提交
现在我们git log一下可以发现多了一条记录 这条记录是在rich分支上的
接下来我们再rich分支上让这个故事继续发展 并提交
git checkout master 回到默认分支
查看txt文件内容 发现已经自动回到了我们创建分支的那个节点的版本。
然后我们在当前节点修改文档内容并提交
git log 发现master分支上新增一条记录
git log --all --graph 图示全部历史记录
合并分支
比如我们开发一个应用,开发到第一个可以上线的版本(v1),然后继续开发第二个版本,在开发第二个版本的过程中发现第一个版本中有bug。此时我们可以在当前节点创建一个分支,这个分支用来改bug。开发第二版本一段时间后可以上线了,但是上线之前要把第一版本的bug修改好,此时只需要把我们刚刚信件的分支和当前分支合并就可以了。这样不仅改好了第一版本的bug,第二版本也可以上线了。我们来把这个过程实现一次。
新建txt文件
现在我们在默认分支(master)在文件中添加内容并提交
继续修改并提交
假如在目前节点我们要上线了 所以可以给它加一个tag
第一个版本上线之后我们可以开始做第二个版本了
假如此时我们发现第一个版本中出现了bug,那么我们回到之前上线的版本。
git log后拷贝版本ID
git checkout -b 分支名 创建并切换至分支
在这个分支上就可以修改我们的bug了,然后提交。
现在就可以回到我们之前的分支(master)了。
继续开发第二版本并提交
现在我们来git log --all --graph 可以看到有一个分支
在上线第二个版本前,我们应该将修改bug的分支ff合并到目前master分支上。
git merge 分支名 合并分支
合并后发现内容有冲突
大于号小于号中的内容就是冲突内容。等号分隔两个分支。
上图的意思是,在当前分支与合并分支的同一位置内容分别是3 4 和fix
修改冲突并提交。
git log --all --graph可以看到分支已经合并。十分清晰。
远程仓库
为了保险起见,我们需要使用远程仓库来托管我们的代码。每次做完一个项目,我们可以在本地保存一份,再提交到远程仓库一份,这样就非常保险了。git就提供了这样一个方案,本质上就是将本地仓库拷到远程服务器上。现在我们来操作一下。
和前面相同,首先我们init一个项目
进入项目目录 然后在目录中创建一个txt文件作为测试
在文件中随便写点东西 保存并提交
现在就创建了一个版本 git log查看一下
然后我们就可以将我们的代码推到远程服务器上,但是服务器从哪里来呢?可以租一台或者买一台,然后自己配置server端,但是这样做不仅要花钱,而且配置起来非常麻烦。所以最方便的还是使用服务。不管国内还是国外都有很多这样的服务。
我们就用比较著名的github。登录官网github.com 注册账号。然后登录。新建一个仓库
指定仓库名称
也可以指定仓库的描述(写不写都行)
非付费用户只能使用public仓库然后创建仓库
以上步骤本质上就和git init一样
可以看到我们远程仓库的地址
然后我们在本地仓库设置一下,告诉本地仓库的外援在哪里。添加远程仓库:git remote add 远程名称 远程地址
git remote 列出所有远程仓库
git remote -v 列出所有远程仓库及其详细信息
fetch为下载地址 push为上传地址。一般情况下个人或者小团队用同一地址是没关系的。
接下来要把我们的代码推到远程仓库git push -u 远程名 分支名 上传代码就是在服务器端设置如果下一次有人想把代码往下拖的时候,应该合并到哪个分支上。
这就成功将我们的代码推到远程仓库了
刷新github页面可以看到我们刚刚推上去的内容
当我们的电脑发生意外 可以利用远程仓库将我们的代码找回来
git clone 仓库地址 克隆(拷贝)仓库
注意:当我们用了clone命令,系统会默认将我们的远程仓库设置为我们克隆的地址,就不需要我们再手动设置了。
git remote 查看所有远程仓库
显示是origin而不是github。origin就类似于master,master是默认分支名称,而origin是默认仓库名称,就怎么简单~我们再推一些代码上去,这次推代码要把远程名改成origin
如何多人远程合作
当有多个成员在同时做一个项目的时候,我们就需要用到从远程仓库下载代码。
git pull 获取远程更新