git的学习与简单使用

计划在这两天完成一下对 git 的初步学习,本来也不是很难的一个东西,自己的电脑上很早就装了但是基本上就是摆设……决定还是学一下,毕竟自己的项目永远都是放养状态,有几次改崩了就真的崩了,是该好好利用一下。

简介

git 是 Linus 在编写 linux 时花两个星期用 C 写的一个版本控制系统,方便管理 linux 的内核代码。git 的很大的特点就是它的弱中央服务器,每一个电脑地位都是等同的,不像 SVN 有一个中心的代码服务器,代码总是要提交到中央,中央的服务器崩掉了就会出很大的问题。

安装

具体的安装过程就不介绍了,在三种系统上安装基本都很简单,也并不用配置路径。

要注意的是配置 git 所安装计算机的名字和 email 地址,可以在 git bash 里设置,也可以直接在 cmd 中设置:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

因为 git 是分布式版本控制系统,要识别每一台在在系统中的计算机,需要配置名字。当然只是一个标志,只要能识别就行。

最基础的几条指令

首先要明确,版本控制系统只能追踪文本文件的改变,如增减了几个字符等,像是图片和视频这类二进制文件,是追踪不了的,word 文档也是二进制的文件,所以追踪不了。

下面介绍一下基础的几条指令:

  1. 将一个目录初始化一个 git 仓库:在该目录下运行git init

  2. 添加文件到提交流上:git add 文件名,添加所有文件将文件名写成’*‘。

  3. 进行文件的提交:git commit -m "提交的记录",记录部分可写一个提交的说明,提交是把之前在提交流上的所有文件进行一次提交,即 add 操作可以分批多次进行,commit 进行总的一次提交。

  4. 追踪仓库中未被 commit 的改变(具体哪个文件出现了变化,变化是否已被 add):git status

  5. 查看文件具体出现了哪些变化:git diff "文件名"

  6. 查看commit的版本:git log,按提交时间最近在前排列

image-20200603180531458

加上参数,git log --pretty=oneline,信息显示在一行

image-20200603181056627

  1. 要切换commit的提交版本,使用git reset --hard XXX,在这里,XXX可以是当前的指针HEAD指向当前版本之前的版本,例如上一个版本表示为HEAD^,上两个版本就再加一个^,多了当然不好表示,可以用HEAD~N(N为阿拉伯数字)表示前N个版本

当然,能往前切版本,也就能往后切版本,后面的版本在log命令下查不到,但是可以在XXX处填写版本号(就是那一串字符,不用填全,几位就够了)实现版本切换

  1. 当然,切换版本的关键,是要知道版本号,但是有的时候,命令行关了没记住,再想切回去,怎么办?使用git reflog可以查看之前的命令历史,包含版本号

image-20200603182937532

  1. 解决修改撤销的几个情景:当你在工作区做了修改,但没add,那么直接git checkout --file就可以回到上一次commit或add的记录;当你做了add操作,可以git reset HEAD <file>实现将暂存区的修改回退到工作区,然后用git checkout --file就可以;如果commit了,可以用上面讲过的版本回退,但是推到远端仓库就没有办法了。

  2. 删除在版本库里的文件,普通的删除,在git的记录里是会保留下来的,如果真的想把这个记录也删除了,那么运行git rm file进行记录删除,再commit,则完全删除;反之之前删错了想恢复,用git checkout --file进行还原(用版本库版本替换工作区版本)。

  3. 远程仓库:目前用的最多的还是github,关于连接github账户与本机的连接要用ssh密钥,这里就不写了。主要是两种方式使用,一种方式是先建立远程空仓库,再将本地的仓库和空仓库绑定,把仓库里的内容推上去;另一种是先建好空仓库,再把仓库克隆下来,进行项目的编写。前一种用git remote add origin git@github.com:账户名/仓库名.git连接,用git push -u origin master进行第一次推送,用git push origin master进行之后的推送。后一种用git clone 仓库网址即可(这个用的很多了吧……时常扒人项目有感)。

好像写的篇幅已经很长了,先停一下,之后的内容放在下一篇继续。