本文将介绍 Git 的简介,优缺点,与SVN的区别,以及在Linux下安装和基本使用Git的技巧等知识

1. 什么是Git

Git是一款免费、开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

2. Git与SVN的区别

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

3. Git优点和缺点

优点:

  1. 适合分布式开发,强调个体。
  2. 公共服务器压力和数据量都不会太大, 速度快、灵活。
  3. 任意两个开发者之间可以很容易的解决冲突。
  4. 离线工作。

缺点:

  1. 学习周期相对而言比较长。
  2. 不符合常规思维。
  3. 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

4. 安装Git

在Centos安装Git,执行yum install git命令,安装完成后,执行git --version命令,查看版本信息,如下图:

hash_1

5. Git常用命令

创建版本库:
命令 行为
git init 初始化本地版本库
git clone 克隆远程版本库
查看提交历史:
命令 行为
git log 查看提交历史
git reflog 查看历史记录的版本号
修改和提交:
命令 行为
git status 查看状态
git diff 查看变更内容
git add . 跟踪所有改动过的文件
git add 跟踪指定文件
git mv 修改文件名
git rm 删除某个文件
git commit -m “commit message” 提交所有更新过的文件
git commit – -amend 提交最后一次修改
分支与标签:
命令 行为
git branch 显示所有本地分支
git branch 创建新的分支
git branch -d 删除本地分支
git checkout 切换到指定分支或标签
git tag 列出所有本地标签
git tag 列出某个标签
git tag -d 删除标签
撤销:
命令 行为
git reset –hard HEAD 撤销工作目录中所有未提交文件的修改内容
git checkout HEAD 撤销指定未提交文件的修改内容
git revert 撤销指定的提交
合并与衍合:
命令 行为
git merge 合并指定分支到当前分支
git rebase 衍合指定分支到当前分支
远程操作:
命令 行为
git remote -v 查看远程版本库信息
git remote show 查看指定远程版本库信息
git remote add 添加远程版本库
git fetch 从远程版本库获取代码
git pull 下载代码及快速合并
git push 上传代码及快速合并
git push : 删除远程分支或标签
git push –tags 上传所有标签

6. 使用Git

6.1 创建版本库

这里举例在 minhow 这个目录下创建版本库,运行git init命令,如下图:

hash_1

6.2 添加和提交文件

在目录下创建一个新的 minhow.txt 文件,执行git status命令,查看git的状态,如下图:

hash_1

再执行git add minhow.txt命令,将 minhow.txt 文件添加到暂存区里,如果一次性提交多个文件,可以执行git add -A命令,将多个文件一起提交,再执行git commit -m 'create a new file minhow.txt'命令,并带上注释,提交到仓库里面,如下图:

hash_1

提交完成后,执行git log命令,查看日志信息,如下图:

hash_1

6.3 修改文件

现在修改 minhow.txt 文件的内容,再执行git status命令,查看状态变化,如下图:

hash_1

上图的告诉我们 minhow.txt 文件已被修改,但是未被提交的修改。接下来执行git diff minhow.txt命令,查看 minhow.txt 文件有什么改变,如下图:

hash_1

(-)表示删除,(+)表示添加,从图可以看出, minhow.txt 文件增加了一行www.minhow.com,最后执行git add minhow.txtgit commit -m 'modify minhow.txt'提交修改,如下图:

hash_1

提交修改后,再查看日志信息:

hash_1

从日志信息,可以看到MinHow刚刚提交的修改信息。

6.4 版本回退

有时候需要对文件的内容恢复到某个版本,可以先查看文件的日志信息,执行git log minhow.txt命令,查看 minhow.txt 文件的日志信息,如下图:

hash_1

可以看到,提交的修改是一串是16进制的字符,是一串哈希值,实际上就是版本号;在 Git 中,用HEAD表示当前版本,也就是最新的提交的版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。现在执行git reset --hard HEAD^把 minhow.txt 文件回退上一个版本,如下图:

hash_1

也可以回退到某个版本号,执行git reset --hard a7d0d2命令,版本号取前几位就行了,如下图:

hash_1

如果突然又想回退到刚刚修改的版本,可以执行git reflog命令,查看刚刚执行的每一次命令:

hash_1

从图可以看到每次执行命令的版本号,现在回退到 df2e7dc 这个版本,执行git reset --hard df2e7dc命令,如下图:

hash_1

从图可以看出,已经成功回退到最新版的状态了。

6.5 删除文件

执行rm minhow.txt命令,删除 minhow.txt 文件,再执行git rm minhow.txt,并git commit -m 'delete minhow.txt',如下图:

hash_1

如果删错文件了,可以执行git checkout -- minhow.txt恢复。

7. 远程仓库

远程仓库使用GitHub,网站提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。在使用之前,先注册github账号,由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要设置。

7.1 配置远程仓库

第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,执行ssh-keygen -t rsa –C “youremail@example.com”命令,执行完后,会在 .ssh 目录生成id_rsa和id_rsa.pub这两个文件,如下图:

hash_1

id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第二步:登录 GitHub ,打开“Account settings”中的“SSH and GPG keys”页面,然后点击“Add SSH Key”,填上任意Title,在Key文本框里黏贴id_rsa.pub文件的内容:

hash_1

点“Add Key”,可以看到已经添加的Key:

hash_1

7.2 添加远程仓库

首先,登录GitHub上,然后在右上角找到“create a new repo”;创建一个新的仓库:

hash_1

填写项目名,其他默认设置就行,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

hash_1

现在,这个仓库是空的,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。根据GitHub的提示,执行git remote add origin git@github.com:JackerHao/MinHow.git命令,再执行git push -u origin master命令,推送成功后,在GitHub页面中看到远程库的内容已经和本地内容一样:

hash_1

从现在起,只要本地提交修改,就可以通过命令:

1
git push origin master

把本地master分支的最新修改推送至GitHub。

8. 创建和合并分支

在Git里,master 分支叫主分支,一般用来发布稳定版本。HEAD严格来说不是指向提交,而是指向 master,master 才是指向提交的,所以,HEAD指向的就是当前分支。dev 分支(开发分支)用来发布开发版本;现在创建dev分支,执行git branch dev命令,再执行git checkout dev命令,切换分支:

1
2
3
$ git branch dev
$ git checkout dev
Switched to branch 'dev'

也可以直接执行git checkout -b dev,跟执行上面两条命令是一样的执行原理。然后使用git branch查看当前分支:

1
2
3
$ git branch
* dev
master

列出所有分支,当前分支前面会标一个*号。现在修改 minhow.txt 文件内容,并提交修改:

1
2
3
4
$ git add minhow.txt
$ git commit -m 'branch minhow.txt'
[dev d700c8d] branch minhow.txt
1 file changed, 1 deletion(-)

修改完成后,切换回主分支 master:

1
2
$ git checkout master
Switched to branch 'master'

查看 minhow.txt 文件,发现刚刚修改的内容没有发生变化,因为刚刚修改时在 dev 分支上的,所以现在合并 dev 分支内容到 master 主分支上:

1
2
3
4
5
$ git merge dev
Updating beb57c4..d700c8d
Fast-forward
minhow.txt | 1 -
1 file changed, 1 deletion(-)

git merge命令用于合并指定分支到当前分支上,再查看 minhow.txt 文件,可以看到,和 dev 分支上修改的一样了。
合并完成之后,把 dev 分支 删除:

1
2
$ git branch -d dev
Deleted branch dev (was d700c8d).

删除成功后,现在只剩 master 主分支了:

1
2
$ git branch
* master

9. 总结

先介绍这么多 Git 的操作命令, 还有很多命令没介绍到, 可以在 Git 官网查看,Git 操作起来比 SVN 会复杂一些,上手起来也会比较慢,但熟悉使用 Git 之后,Git 的功能还是很强大的。

最后更新: 2017年11月19日 20:17

原始链接: http://blog.minhow.com/2017/01/04/tool/git-use/

× 请我吃糖~
打赏二维码