
GIT命令操作全攻略,请收下我的膝盖!
一、简介
在介绍git操作命令之前,我们先来了解一段故事!
很多人都知道,Linus 在1991年 创建了开源的Linux操作系统,此后的三十多年里,Linux 系统不断发展,已然成为全世界最大的服务器系统软件了。
Linus 虽然创建了Linux操作系统,但是Linux操作系统的壮大是得益于全世界热心的志愿者参与的,这么多人在世界各地为Linux操作系统编写代码,那Linux操作系统的代码是如何管理的呢?
在 2002 年以前,世界各地的志愿者把源代码文件通过diff的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!
不过,到了 2002 年,Linux操作系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满。
可能有的同学会发出疑问,不是有 CVS、SVN 这些免费的版本控制系统吗?为什么不用它们来托管Linux操作系统代码?
因为 Linus 本人坚定地反对 CVS 和 SVN,原因是这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。
于是 Linus 选择了一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统。
随着 Linux 社区对 BitKeeper 版本控制系统的深度了解,原本安定团结的大好局面在 2005 年被打破了,原因是 Linux 社区牛人众多,一名叫 Andrew 的开发者把 BitKeeper 商业授权协议破解了(这么干的其实也不只他一个),之后被 BitMover 公司发现了(监控工作做得不错!),于是 BitMover 公司怒了,要收回 Linux 社区的免费使用权。
Linus 向 BitMover 公司道了歉,保证以后严格管教弟兄们,嗯,想要别人不破解,这其实是不可能的。
之后,Linus 花了两周时间自己用 C 写了一个分布式版本控制系统,这就是我们今天要介绍的 Git!(牛人是怎么定义的,大家可以自行体会一下)
一个月之内,Linux 系统的源码已经由 Git 管理了!
之后的事情,想必估计都知道,Git 迅速成为全世界最流行的分布式版本控制系统,在代码托管方面,基本上是一骑绝尘!
尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数的开源项目开始迁移至 GitHub,包括 jQuery、PHP、Ruby等等!
说了这么多,Git 是一款什么样的软件?和 CVS、SVN 这些免费的版本控制系统有什么区别呢?
上文中我们也说到了,Git 其实是一款分布式的版本控制系统,可能你还是不太理解什么叫分布式,我们先聊聊什么是集中式!
集中方的版本控制系统,简单的说,就是当你要干活的时候,用的一般都是自己的电脑,首先要从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
集中式版本控制系统,好处就是统一管理,但是坏处也很明显,必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
分布式版本控制系统,与集中式版本控制系统最大的不同就是:没有中央服务器这个东西。
每个人的电脑上都是一个完整的版本库,可以说每个电脑都是中央服务器,当你工作的时候,不需要联网,可以直接提交工作的内容,如果对方的电脑想要知道你的工作内容,你只需要把对应的工作文件推送过去就可以,对方就可以看到,其他不相关的文件不需要推送给对方!
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
既然git这么受欢迎,下面我们就开始git的学习之旅吧!
二、安装 GIT
2.1、在 Linux 上安装 Git
如果你当前的电脑操作系统是 Linux,安装起来会非常简单,首先试着输入git,看看系统有没有安装Git:
像上面的命令,有很多 Linux 会友好地告诉你 Git 没有安装,还会告诉你如何安装 Git。
按照提示,输入如下命令,即可安装git!
2.2、在 Mac OS X 上安装 Git
如果你正在使用 Mac 做开发,有两种安装 Git 的方法!
一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。
第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,因为Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单Xcode->Preferences,在弹出窗口中找到Downloads,选择Command Line Tools,点Install就可以完成安装了。
Xcode是Apple官方IDE,功能非常强大,是开发Mac和iOS App的必选装备,而且是免费的!
2.3、在 Windows 上安装 Git
在Windows上使用Git,就比较傻瓜式了,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到Git->Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
以上全部安装完成后,还需要最后一步设置,在命令行输入:
配置的你用户名和邮箱,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门!
三、GIT 操作手册
在上文中,我们对git的安装进行了一些简单的介绍,等环境准备完成之后,我们就可以开启GIT之旅!
3.1、配置管理
在上文中,我们有介绍了全局配置用户名和邮箱,假如你的用户和邮箱输入错误了,想修改,怎么办呢?
同样可以用如下的命令,进行修改!
同时,还可以通过如下命令查询配置
如果你想针对某个库,设置用户名和邮箱,直接当前仓库根路径下,通过如下方式可以实现单独配置!
如果你配置的仓库,用户和密码填错了,可以通过如下命令方式清除,然后重新配置!
3.2、版本管理
版本库管理是GIT最重要的核心模块,具体操作如下!
当你想向GIT里面提交一个文件的时候,首先需要初始化一个版本库
然后,可以通过如下命令,添加或者修改一个的指定文件!
当然,你还可以通过如下命令,添加当前目录下全部的文件!
添加完成之后,还需要提交文件,命令如下
例如,提交所有的内容提交到版本库!
有些时候,我们需要通过一下命令,查询当前工作区的信息。
比如,查看当前工作区的状态,这个基本上经常用到!
查询当前版本库的历史提交日志纪录,这个会在版本回滚的时候用到!
查看当前文件的内容!
查看历史提交的命令!
查看文件修改内容!
查看工作区和版本库里面最新版本的区别!
如果你想将当前文件回滚到历史上某个时间点提交的文件,可以通过如下命令!
当你修改了某个文件,但是没有提交,想要回滚,怎么处理呢?可以通过如下命令进行撤回!
如果你想全部撤销,可以通过如下命令撤回全部!
当然,如果你不想要某个文件了,可以通过如下方式删除!
3.3、分支管理
GIT的分支管理,非常强大,也是它远胜 CVS、SVN 这些免费的版本控制系统一大神器!
GIT在初始化版本库的时候,会默认创建一个master分支,也就是主干分支!
如果你想创建某个分支,可以通过如下命令创建!
比如,创建一个develop分支!
当执行这个命令之后,GIT的develop分支指针会指向到当前分支当前位置!
怎么切换到分支呢?我们可以通过git checkout命令,实现分支的切换!
当然,你还可以一步到位,通过如下命令,创建并切换分支!
通过下面这个命令,可以查询当前分支!
如果分支切换失败,可以通过git status命令查询一下为什么会失败,分支切换失败多半是当前工作区的代码没有提交到版本库里面导致,可以检测一下是不是代码都提交到本地版本库!
在平时的开发过程中,我们会经常碰到需要合并分支,比如将develop分支合并到master分支,怎么处理呢?
可以通过如下命令,实现快速合并!
在合并的时候,可能会出现文件发生冲突的情况,如果出现,就排查修改文件,然后提交!
当然,你还可以通过如下命令,来实现分支合并提交!
如果某个分支,你不想要了,想删除,可以通过如下命令实现!
如果删除过程中,出现报错,可以下面这个命令,强行删除!
最后,你可以通过下面这个命令,查询当前版本分支的变动情况!
3.4、标签管理
标签管理,也是git最最核心的功能!通过标签,我们可以很快的定位到仓库中某个版本,并进行代码回滚!
可以通过如下命令创建某个标签,比如v1.0标签。
查看标签情况
如果你想看某个标签,具体的详情,可以通过如下命令!
如果你不想要了,可以通过如下命令,删除标签!
当然,如果你想针对某个历史版本,打标签,可以通过如下方式实现!
我们还可以将标签推送到远程分支,命令如下:
删除远程标签库
3.5、忽略文件管理
GIT还为我们提供了一个巨大的利器,我们可以通过配置忽略文件,将当前目录中某些文件忽略掉,不提交到版本库里面,具体怎么操作呢?
• 首先在当前版本库根目录下,创建一个.gitignore文件,内容自己定义,比如下面这个内容,就是小编定义的忽略文件,
然后,执行如下命令,让忽略文件生效!
3.6、远程仓库管理
以上介绍的基本上都是本地仓库的操作,如果我们需要与其他的电脑协助工作,怎么处理呢?
如果我们本地没有仓库,我们可以直接从远程分支里面拉取一个版本库同步到本地,命令如下。
我们可以通过如下命令,查询远程分支的详情
如果你是通过git init方式初始化了本地仓库,想与远程分支关联,可以通过如下命令实现!
如果你填写错了,想删除,可以通过如下命令删除,再重新添加!
如果你之前没有推送内容到远程库,可以通过如下命令推送
后期推送到远程分支,可以这样操作
有时候,我们还需要查询远程分支的情况,可以通过如下命令操作:
有时候,我们还需要从远程服务器拉取某个指定的分支到本地,可以通过下面这个命令完成:
大部分的情况下,当远程服务器更新了版本库,通知我们也要更新时,通过如下方式,即可将远程的版本库最新的内容同步到我们本地电脑版本库里面。
有时候,需要设置本地分支与远程分支的链接,可以通过下面这个命令完成:
有时候,我们需要删除没有untracked的文件,可以通过下面这个命令完成:
3.7、冲突处理
版本同步的时候,如果大家都修改了同一个文件,难免会发生冲突。
比如,当修改的文件未提交,直接远程拉取代码会发生冲突,改怎么办呢?
可以这样处理
此时系统会提示如下类似的信息:
意思就是系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突。
然后打开冲突的文件,进行修改,修改完毕之后,执行如下命令进行提交!
当然,还可以进行强制更新操作,覆盖本地代码,命令如下!
四、与服务器建立 ssh 连接
git中电脑与电脑之前的连接,支持的模式有两种:HTTP和SSH,其中HTTP的传输会比较慢,才能SSH方式进行互推,效率会非常高!
因此,在实际的使用过程总,推荐使用SSH模式与远程服务器建立连接!
例如与GitHub的连接,具体的操作配置方式如下!
4.1、创建 SSH Key
在当前电脑用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可以直接跳过。
如果没有,打开Shell(Windows下打开Git Bash),创建 SSH Key:
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个 Key 也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是 SSH Key 的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
4.2、将公钥配置到服务端
登陆 GitHub,打开Account settings,SSH Keys页面:
然后,点Add SSH Key,填上任意Title,在 Key 文本框里粘贴id_rsa.pub文件的内容:
点Add Key,你就应该看到已经添加的 Key !
至此,本地与远程服务器的连接配置已经完成,剩下的就是直接远程服务器拉取代码,然后提交的时候git push就可以了!
五、小结
本文主要围绕GIT的背景和常用的操作命令做了一些介绍,可能有些地方介绍的比较粗陋、不完美,希望老铁们能批评指出!
六、参考
1、廖雪峰 - GIT 教程
本文转载自公共号Java极客技术。
