什么是git
git是一个开源的分布式版本控制系统(Distributed Version Control System,简称DVCS),是目前世界上最先进,最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。分为两种仓库 :本地仓库和远程仓库。
Git 的特点
项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能和高可用性!Git 之所以快速和高效,主要依赖于① 直接记录快照,而非差异比较;② 近乎所有操作都是本地执行; 的特性
本地仓库
是在开发人员自己电脑上的Git仓库
远程仓库
是在远程服务器上的Git仓库
基础操作命令
Clone:克隆,就是将远程仓库复制到本地;
Push:推送,就是将本地仓库代码上传到远程仓库;
Pull:拉取,就是将远程仓库代码下载到本地仓库;
git工作流程
1.从远程仓库中克隆代码到本地仓库;
2.从本地仓库中checkout代码,然后进行代码修改;
3.在提交前先将代码提交到暂存区;
4.提交到本地仓库。本地仓库中保存修改的各个历史版本;
5.修改完成之后,需要和团队成员共享代码时,将代码push到远程仓库;
安装并配置 Git
根据自己的操作系统,选择下载对应的 Git
安装包:
网址:http://www.git-scm.com.cn/
Git 的全局配置文件
1.设置自己的用户名和邮件地址
通过 Git
对项目进行版本管理的时,Git
需要使用这些基本信息,来记录是谁对项目进行了操作
git config --global user.name "itheima"
git config --global user.email "itheima@itcast.cn"
注意:如果使用了 --global 选项,那么该命令只需要运行一次,即可永久生效
检查配置信息
除了使用记事本查看全局的配置信息之外,还可以运行如下的终端命令,快速的查看 Git 的全局配置信息:
# 查看所有的全局配置项
git config --list --global
# 查看指定的全局配置项
git config user.name
git config user.email
获取帮助信息
可以使用 git help <verb>
命令,无需联网即可在浏览器中打开帮助手册
不想查看完整的手册,那么可以用 -h 选项获得更简明的“help”输出
# 打开 git config 命令的帮助手册
git help config
# 想要获取 git config 命令的快速参考
git config -h
获取 Git
仓库的两种方式
① 将尚未进行版本控制的本地目录转换为 Git
仓库
② 从其它服务器克隆一个已存在的 Git
仓库
以上两种方式都能够在自己的电脑上得到一个可用的 Git 仓库
// 执行 git init 命令将当前的目录转化为 Git 仓库
git init
从远程仓库克隆
git clone 远程Git仓库地址
工作目录、暂存区以及版本库概念
版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等;
工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码。
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方。
Git工作目录下的文件状态
untracked未跟踪(未被纳入版本控制)
tracked已跟踪(被纳入版本控制)
Unmodified未修改状态
Modifed已修改状态
Staged已暂存状态
本地仓库操作
git status 查看文件状态
git status -s是输入的信息更加的简介
git add将未跟踪的文件加入暂存区
git resst 将暂存区的文件取消暂存
git commit 将暂存区的文件修改提交到本地仓库
git rm删除文件
git log查看日志记录
将文件添加到忽略列表:
.gitignore 配置文件用于配置不需要加入到版本管理中的文件,用来管理一些本地的临时文件。
1.新建一个.gitignore文件,文件名:.gitignore
(也可以在git bash中 采用vim .gitignore,然后编辑好之后:wq!保存)
2.这个文件默认放在项目的根目录,为这个Git项目配置忽略列表,同时也可以通过命令配置本地全局的忽略列表
$git config –global core.excludesfile ~/.gitignore
3.配置文件示例
# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
# 忽略 build/ 文件夹下的所有文件,包括子目录下的subdir/build文件夹中的文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
远程仓库操作
1.查看远程仓库
如果想查看已经配置的远程仓库服务器,可以运行git remote命令
如果已经克隆了远程仓库,那么应该至少能看到origin,这是git克隆的仓库服务器的默认名字
2.添加远程仓库
运行git remote add 添加一个新的远程git仓库
3.从远程仓库克隆
克隆仓库的命令是 git clone [url]
当执行git clone命令的时候,默认配置下远程git仓库中的每一个文件的每一个版本都将被拉取下来
4.移除无效的远程仓库
如果因为一些原因想要移除一个远程仓库,可以使用git remote em
注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库
5.从远程仓库中抓取与拉取
git fetch是从远程仓库获取最新版本到本地仓库,不会自动merge;
git pull是从远程仓库获取最新版本并merge到本地仓库;
git fetch是从远程仓库获取最新版本到本地仓库,不会自动merge;
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时在从远程仓库拉取文件的时候会报错(fatal:refusing to merge unrelated histories),解决此问题可以在git pull 命令后加入参数–allow-unrelated -histories
6.推送到远程仓库
当你想分享你的代码时,可以将其推送到远程仓库
命令形式
git push -u origin 分支名
切换到指定的版本
// 在一行上展示所有的提交历史
git log --pretty = oneline
// 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定版本
git reset--hard <CommitID>
// 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史
git reflog--pretty = oneline
// 再次根据最新的提交 ID, 跳转到最新的版本
git reset--hard <CommitID>
分支:
分支是专门用来开发新功能的分支,它是临时从 master 主分支上分叉出来的,当新功能开发且测试,完毕后,最终需要合并到 master 主分支上
查看分支列表:git branch (*表示当前所在分支)
创建分支:git branch 分支名 当创建完后,那么在master主分支上面就会分叉一个分支
切换分支:git checkout 分支名称
分支的快速创建和切换:git checkout -b 分支名称
合并分支:git merge 分支名(前提是要通过git branch master切换到主分支哦)
删除分支: git branch -d 分支名称
遇到冲突时的分支合并:
解决方法:
切换到master分支上,修改 index.html 里面的内容,进行提交;
切换到login分支上,修改 index.html 里面内容,进行提交;
切换到master分支上,进行merge合并,此时发生了冲突;
打开冲突的文件,然后进行修改;
修改完后,输入 git add .
输入 git commit -m 进行提交
// 假设:在把 reg 分支合并到 master 分支期间
git checkout master
git merge reg
// 打开包含冲突的文件,手动解决冲突之后,再执行如下命令
git add.
git commit -m "解决分支合并冲突的问题"