Git是开源的分布式版本控制系统,可以说是开发人员必备了,每个程序员都应该掌握。这里主要讲Git的安装与配置,工作区、暂存区、版本库的概念以及常用的一些命令。
Linux下Git的安装与配置
Ubuntu下可以运行以下命令安装:sudo apt install git,安装成功后可查看Git版本:git --version。
Git配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
- /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用“--system”选项,读写的就是这个文件。可使用
git config -e --system对配置文件进行配置。 - ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用“--global”选项,读写的就是这个文件。可使用
git config -e --global对配置文件进行配置。 - 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig中的同名变量。可进入对应项目目录使用
git config -e对配置文件进行配置。
(Git的配置文件是INI格式的)
配置用户信息
开始前,需要先配置用户名和邮件地址:
git config --global user.name "your name"
git config --global user.email your_email
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
查看已有的配置信息:git config --list。
Git基本概念(工作区、暂存区、版本库)
理解Git是怎么工作的,主要是要理解工作区、暂存区、版本库这三个概念。
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

工作区-->暂存区 当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
暂存区-->版本库 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树(这句话相对绕口一些,这里以master分支为例)。
Git常用命令
创建仓库
git init:使用当前目录作为Git仓库git init <directory>:使用指定目录作为Git仓库
git clone
git clone <repertory-url>:克隆仓库git clone <repertory-url> <directory>:克隆到指定目录
git diff
git diff:查看工作区的最新改动,即工作区与提交暂存区的差异git diff --cached:查看已缓存的改动,即提交暂存区与版本库中的差异git diff HEAD:查看工作区与HEAD(当前工作分支)的差异git diff --stat:显示摘要而非整个 diff:
HEAD :代表版本库中最近一次提交
^ :指代父提交
HEAD^:代表当前提交的上一次提交
HEAD^^:以此类推......
git reset
git reset --hard HEAD^:回退到上一次提交。彻底撤销最近的提交,工作区和暂存区都回退到上一次提交的状态。git reset --hard <commit>:回退到指定提交
git reset --hard参数会进行彻底回退,工作区、暂存区、版本库内容一致,即回退到指定commit的那个状态
查看项目的分支们(包括本地和远程)
git branch -a
删除本地分支与远程分支
git branch -d <BranchName>: 删除本地分支git push origin --delete <BranchName>: 删除远程分支
其他命令
git add:文件添加到缓存git add .:添加项目的所有文件git status:查看当前状态git commit -m"注释":将缓存区内容添加到仓库