GIT命令操作全攻略,请收下我的膝盖!

系统教程10个月前发布 wahs52034
7 0 0

一、简介

在介绍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命令操作全攻略,请收下我的膝盖!

说了这么多,Git 是一款什么样的软件?和 CVS、SVN 这些免费的版本控制系统有什么区别呢?

上文中我们也说到了,Git 其实是一款分布式的版本控制系统,可能你还是不太理解什么叫分布式,我们先聊聊什么是集中式!

集中方的版本控制系统,简单的说,就是当你要干活的时候,用的一般都是自己的电脑,首先要从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

GIT命令操作全攻略,请收下我的膝盖!

集中式版本控制系统,好处就是统一管理,但是坏处也很明显,必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

分布式版本控制系统,与集中式版本控制系统最大的不同就是:没有中央服务器这个东西。

每个人的电脑上都是一个完整的版本库,可以说每个电脑都是中央服务器,当你工作的时候,不需要联网,可以直接提交工作的内容,如果对方的电脑想要知道你的工作内容,你只需要把对应的工作文件推送过去就可以,对方就可以看到,其他不相关的文件不需要推送给对方!

GIT命令操作全攻略,请收下我的膝盖!

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

既然git这么受欢迎,下面我们就开始git的学习之旅吧!

二、安装 GIT

2.1、在 Linux 上安装 Git

如果你当前的电脑操作系统是 Linux,安装起来会非常简单,首先试着输入git,看看系统有没有安装Git:

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

像上面的命令,有很多 Linux 会友好地告诉你 Git 没有安装,还会告诉你如何安装 Git。

按照提示,输入如下命令,即可安装git!

sudo apt-get install 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 config --global user.name "Your Name"

#配置全局邮箱
git config --global user.email "email@example.com"

配置的你用户名和邮箱,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门!

三、GIT 操作手册

在上文中,我们对git的安装进行了一些简单的介绍,等环境准备完成之后,我们就可以开启GIT之旅!

3.1、配置管理

在上文中,我们有介绍了全局配置用户名和邮箱,假如你的用户和邮箱输入错误了,想修改,怎么办呢?

同样可以用如下的命令,进行修改!

#重新配置用户名
git config --global user.name "zhangsan"

#重新配置邮箱
git config --global user.email "zhangsan@example.com"

同时,还可以通过如下命令查询配置

#查看当前配置
git config --list


如果你想针对某个库,设置用户名和邮箱,直接当前仓库根路径下,通过如下方式可以实现单独配置!

#配置某个仓库的用户名、邮箱
git config user.name "Your Name"
git config user.email "email@example.com"

如果你配置的仓库,用户和密码填错了,可以通过如下命令方式清除,然后重新配置!

git config --system --unset credential.helper

3.2、版本管理

版本库管理是GIT最重要的核心模块,具体操作如下!

当你想向GIT里面提交一个文件的时候,首先需要初始化一个版本库

#初始化一个版本库
git init

然后,可以通过如下命令,添加或者修改一个的指定文件!

#添加或者修改一个的指定文件
git add <文件名>

当然,你还可以通过如下命令,添加当前目录下全部的文件!

#添加或者修改的所有文件
git add --all

添加完成之后,还需要提交文件,命令如下

#提交文件
git commit -m <注释>


例如,提交所有的内容提交到版本库!

#例如,提交所有的文件添加修改提交到版本库
git commit -m "注释内容"


有些时候,我们需要通过一下命令,查询当前工作区的信息。

比如,查看当前工作区的状态,这个基本上经常用到!

#查看当前工作区的状态
git status

查询当前版本库的历史提交日志纪录,这个会在版本回滚的时候用到!

#查看历史日志
git log

#查看精简日志
git log --pretty=oneline

查看当前文件的内容!

#查看文件内容
cat <文件名>

查看历史提交的命令!

#查看历史提交的命令
git reflog

查看文件修改内容!

#查看当前文件修改内容
git diff <文件名>

查看工作区和版本库里面最新版本的区别!

#查看当前文件和版本库里面最新版本的区别
git diff HEAD -- <文件名>

如果你想将当前文件回滚到历史上某个时间点提交的文件,可以通过如下命令!

#首先查询你要回滚到历史上某个时间点的版本ID
git log --pretty=oneline

#然后通过如下命令,进行回滚操作
git reset --hard <版本id>


当你修改了某个文件,但是没有提交,想要回滚,怎么处理呢?可以通过如下命令进行撤回!

#撤销某个文件的修改
git checkout -- <文件名>


如果你想全部撤销,可以通过如下命令撤回全部!

#撤销所有修改
git checkout .

当然,如果你不想要某个文件了,可以通过如下方式删除!

#删除指定文件
git rm <文件名>

3.3、分支管理

GIT的分支管理,非常强大,也是它远胜 CVS、SVN 这些免费的版本控制系统一大神器!

GIT在初始化版本库的时候,会默认创建一个master分支,也就是主干分支!

如果你想创建某个分支,可以通过如下命令创建!

#创建分支
git branch <分支名>

比如,创建一个develop分支!

git branch develop

当执行这个命令之后,GIT的develop分支指针会指向到当前分支当前位置!

怎么切换到分支呢?我们可以通过git checkout命令,实现分支的切换!

#切换分支
git checkout <分支名>

当然,你还可以一步到位,通过如下命令,创建并切换分支!

#创建分支+切换分支
git checkout -b <分支名>

通过下面这个命令,可以查询当前分支!

#查看当前分支
git branch


如果分支切换失败,可以通过git status命令查询一下为什么会失败,分支切换失败多半是当前工作区的代码没有提交到版本库里面导致,可以检测一下是不是代码都提交到本地版本库!

在平时的开发过程中,我们会经常碰到需要合并分支,比如将develop分支合并到master分支,怎么处理呢?

可以通过如下命令,实现快速合并!

#快速合并分支
git merge <分支名>

在合并的时候,可能会出现文件发生冲突的情况,如果出现,就排查修改文件,然后提交!

当然,你还可以通过如下命令,来实现分支合并提交!

#普通模式合并分支+提交
git merge --no-ff -m "merge with no-ff" <分支名>

如果某个分支,你不想要了,想删除,可以通过如下命令实现!

#删除分支
git branch -d <分支名>

如果删除过程中,出现报错,可以下面这个命令,强行删除!

#强行删除分支
git branch -D <分支名>

最后,你可以通过下面这个命令,查询当前版本分支的变动情况!

#查看分支合并图
git log --graph

3.4、标签管理

标签管理,也是git最最核心的功能!通过标签,我们可以很快的定位到仓库中某个版本,并进行代码回滚!

可以通过如下命令创建某个标签,比如v1.0标签。

#创建标签
git tag v1.0

查看标签情况

#查看所有的标签
git tag

如果你想看某个标签,具体的详情,可以通过如下命令!

#查看标签信息
git show <标签名>

如果你不想要了,可以通过如下命令,删除标签!

#删除标签
git tag -d <标签名>

当然,如果你想针对某个历史版本,打标签,可以通过如下方式实现!

#查看历史版本id
git log --pretty=oneline --abbrev-commit

#对某个版本ID,打上标签,名称v0.9
git tag v0.9 <版本id>

我们还可以将标签推送到远程分支,命令如下:

#推送全部标签到远程库
git push origin --tags

删除远程标签库

#删除本地标签
git tag -d v0.9

#推送到远程分支
git push origin :refs/tags/<标签名>

3.5、忽略文件管理

GIT还为我们提供了一个巨大的利器,我们可以通过配置忽略文件,将当前目录中某些文件忽略掉,不提交到版本库里面,具体怎么操作呢?

首先在当前版本库根目录下,创建一个.gitignore文件,内容自己定义,比如下面这个内容,就是小编定义的忽略文件,

/target/
!.mvn/wrapper/maven-wrapper.jar

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
*.class

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
/build/

### mac ###
.DS_Store
file/
logs/
*/target
target/

然后,执行如下命令,让忽略文件生效!

#清除缓存
git rm -r --cached .

#添加所有文件
git add .

#提交到版本库
git commit -m "update .gitignore"

#提交到远程分支(如果有的话)
git push

3.6、远程仓库管理

以上介绍的基本上都是本地仓库的操作,如果我们需要与其他的电脑协助工作,怎么处理呢?

如果我们本地没有仓库,我们可以直接从远程分支里面拉取一个版本库同步到本地,命令如下。

#从远端服务器创建主分支
git clone <url>


我们可以通过如下命令,查询远程分支的详情

#查看远程库
git remote -v

如果你是通过git init方式初始化了本地仓库,想与远程分支关联,可以通过如下命令实现!

#添加远程地址
git remote add origin <url>

如果你填写错了,想删除,可以通过如下命令删除,再重新添加!

#删除远程提交地址
git remote rm origin


如果你之前没有推送内容到远程库,可以通过如下命令推送

#首次推送到远程库并创建分支
git push -u origin <分支名> (第一次将内容推送到master分支)

后期推送到远程分支,可以这样操作

#后期推送到远程分支
git push origin <分支名>

#可以简写,快速推送
git push

有时候,我们还需要查询远程分支的情况,可以通过如下命令操作:

#查看远程的所有分支
git branch -a

有时候,我们还需要从远程服务器拉取某个指定的分支到本地,可以通过下面这个命令完成:

#从远程服务器拉取某个指定的分支到本地,并创建分支
git checkout -b <分支名> origin/<分支名>

大部分的情况下,当远程服务器更新了版本库,通知我们也要更新时,通过如下方式,即可将远程的版本库最新的内容同步到我们本地电脑版本库里面。

#拉取远程分支内容,并同步到本地版本库
git pull


有时候,需要设置本地分支与远程分支的链接,可以通过下面这个命令完成:

#设置本地分支与远程分支的链接
git branch --set-upstream dev origin/dev

有时候,我们需要删除没有untracked的文件,可以通过下面这个命令完成:

#删除没有untracked的文件
git clean -d -xf

3.6、远程仓库管理

以上介绍的基本上都是本地仓库的操作,如果我们需要与其他的电脑协助工作,怎么处理呢?

如果我们本地没有仓库,我们可以直接从远程分支里面拉取一个版本库同步到本地,命令如下。

#从远端服务器创建主分支
git clone <url>

我们可以通过如下命令,查询远程分支的详情

#查看远程库
git remote -v

如果你是通过git init方式初始化了本地仓库,想与远程分支关联,可以通过如下命令实现!

#添加远程地址
git remote add origin <url>

如果你填写错了,想删除,可以通过如下命令删除,再重新添加!

#删除远程提交地址
git remote rm origin

如果你之前没有推送内容到远程库,可以通过如下命令推送

#首次推送到远程库并创建分支
git push -u origin <分支名> (第一次将内容推送到master分支)

后期推送到远程分支,可以这样操作

#后期推送到远程分支
git push origin <分支名>

#可以简写,快速推送
git push

有时候,我们还需要查询远程分支的情况,可以通过如下命令操作:

#查看远程的所有分支
git branch -a

有时候,我们还需要从远程服务器拉取某个指定的分支到本地,可以通过下面这个命令完成:

#从远程服务器拉取某个指定的分支到本地,并创建分支
git checkout -b <分支名> origin/<分支名>

大部分的情况下,当远程服务器更新了版本库,通知我们也要更新时,通过如下方式,即可将远程的版本库最新的内容同步到我们本地电脑版本库里面。

#拉取远程分支内容,并同步到本地版本库
git pull

有时候,需要设置本地分支与远程分支的链接,可以通过下面这个命令完成:

#设置本地分支与远程分支的链接
git branch --set-upstream dev origin/dev

有时候,我们需要删除没有untracked的文件,可以通过下面这个命令完成:

#删除没有untracked的文件
git clean -d -xf

3.7、冲突处理

版本同步的时候,如果大家都修改了同一个文件,难免会发生冲突。

比如,当修改的文件未提交,直接远程拉取代码会发生冲突,改怎么办呢?

可以这样处理

#先将本地修改存储起来
git stash

#暂存了本地修改之后,就可以pull了
git pull

#还原暂存的内容
git stash pop stash@{0}

此时系统会提示如下类似的信息:

Auto-merging c/environ.c
CONFLICT (content): Merge conflict in c/environ.c

意思就是系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突。

然后打开冲突的文件,进行修改,修改完毕之后,执行如下命令进行提交!

git add .
git commit -m "注释"
git push

当然,还可以进行强制更新操作,覆盖本地代码,命令如下!

#下载远程库内容
git fetch --all

#不做任何的合并,git reset 会把HEAD指向刚刚下载的最新的版本
git reset --hard origin/master

四、与服务器建立 ssh 连接

git中电脑与电脑之前的连接,支持的模式有两种:HTTP和SSH,其中HTTP的传输会比较慢,才能SSH方式进行互推,效率会非常高!

因此,在实际的使用过程总,推荐使用SSH模式与远程服务器建立连接!

例如与GitHub的连接,具体的操作配置方式如下!

4.1、创建 SSH Key

在当前电脑用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可以直接跳过。

如果没有,打开Shell(Windows下打开Git Bash),创建 SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个 Key 也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是 SSH Key 的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

4.2、将公钥配置到服务端

登陆 GitHub,打开Account settings,SSH Keys页面:

GIT命令操作全攻略,请收下我的膝盖!

然后,点Add SSH Key,填上任意Title,在 Key 文本框里粘贴id_rsa.pub文件的内容:

GIT命令操作全攻略,请收下我的膝盖!

点Add Key,你就应该看到已经添加的 Key !

至此,本地与远程服务器的连接配置已经完成,剩下的就是直接远程服务器拉取代码,然后提交的时候git push就可以了!

五、小结

本文主要围绕GIT的背景和常用的操作命令做了一些介绍,可能有些地方介绍的比较粗陋、不完美,希望老铁们能批评指出!

© 版权声明

相关文章