2. Git基础操作
上节教程我们介绍了在 MacOS、Windows 和 Linux 系统中 Git 的安装方式,本节开始将开始 Git 使用方面的教程。
本节说明
本节涉及到的命令只讲基础使用方法,更多高级用法请期待后续的高阶操作。
初次使用 Git 前的配置
我们已经在电脑上安装了 git,但在使用 git 之前还需要对 git 进行一番配置。本节只讲最基础的配置项,配置用户名和邮箱,更多高级配置项目会在后续的高阶操作中讲到。
使用下面的命令可以查看当前配置:
git config --list
执行上面的命令后会输出如下图所示的配置项
图中 user.name
是用户名(一般是你在 git 服务器中的用户名), user.email
是用户邮箱(一般是你的工作邮箱)。
使用下面的命令可以修改这两个配置项:
# 用法
git config 配置项名称 配置项值
sudo git config --system 配置项名称 配置项值
git config --global 配置项名称 配置项值
git config --local 配置项名称 配置项值
在配置 system 级别的配置项时如果当前登录用户不是 root 用户的话,需要使用 sudo 才能配置成功。
--local
表示配置是在当前目录所对应的仓库中生效,如果不加参数默认就是这个--global
表示配置是在当前用户的所有仓库中生效--system
表示配置是在当前操作系统中全局生效
如果各个层级的配置中有相同的配置项,生效的顺序为 local
-> global
-> system
,低级可以覆盖高级的。
获取仓库
获取仓库的方式一般有两种方式:
- 本地使用 git init 命令初始化
- 检出一个远程仓库
本地初始化仓库
本地初始化仓库非常简单,只需要在要做为仓库的目录下执行命令 git init
就可以把当前目录初始化为一个 git 仓库。
检出一个远程仓库
一般情况下在工作中都是由项目负责人在 git 服务器上新建一个仓库,其他人再使用下面的命令在本地检出这个仓库,然后再进行开发。
git clone 远程仓库地址
查看文件状态
有了一个本地仓库以后我们就可以开始开发了,在开发时我们可以先不关心 git,像常规的文件操作一样进行文件的添加和修改就可以。
在第一节中我们讲过在 git 中文件有 3 种状态:已修改、已暂存、已提交。
- 已修改:表示修改了文件,但还没保存到数据库中。
- 已暂存:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交:表示数据已经安全地保存在本地数据库中。
使用下面的命令可以看到当前仓库的文件状态:
git status
使用 git status
命令的输出十分详细,但也有些繁琐,使用下面的命令可以输入简短的状态信息:
git status --short
git status -s # -s 是--short的简写
暂存更改
在文件被添加或修改后处于已修改状态,这个时候文件的变动还未被 git 追踪,如果这个时候文件出现误删除或误改动的情况,是无法还原对文件的改动的。
使用下面的命令可以把改动暂存到 git 暂存区(索引)中:
# 用法
git add 要暂存的文件
# 暂存当前目录下的index.html文件
git add index.html
git add ./index.html
# 暂存所有js文件
git add *.js
# 暂存src目录以及所有子目录下的文件
git add src
# 暂存所有文件
# .一般用来表示当前目录,使用.做为暂存目录可以暂存当前目录下的所有文件变动
git add .
提交更改
使用 git add
暂存以后文件处于已暂存状态,已暂存的文件会包含在下次的提交中,但还未安全的保存在 git 数据库中,需要进行提交操作才能使用文件的本次变动保存到 git 数据库。
使用下面的命令可以进行提交操作:
# 用法
git commit -m 提交说明
# 提交上次暂存的文件
git commit -m 修复了xxx问题
# 自动暂存并提交索引中已存在的文件
# -a参数表示自动暂存索引中已存在的文件
# 如果一个文件是新增的还是需要使用git add命令
git commit -am 提交说明
推送更改
上面的命令把更改保存到了本地仓库的 git 数据库中,但在团队协作中还需要让你的更改在团队所有成员的代码中生效。这时就需要推送更改了。
使用下面的命令可以把本地的更改推送到服务器:
# 用法
git push
拉取新代码
把代码推送到服务器以后,同事使用下面的命令可以把你推送的代码拉取到本地。
git pull
忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore
的文件,列出要忽略的文件的模式。
来看一个实际的 .gitignore 例子:
# 忽略以.log结尾的文件
*.log
# 忽略temp目录下的文件
temp/
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。