介绍
是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
git的功能
协同修改
多人并行不悖的修改服务器端的同一个文件。
数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式。
权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git 独有。
历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
版本控制工具分类
集中式版本控制工具
CVS、SVN、VSS……
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
git的优势
大部分操作在本地完成,不需要联网
完整性保证
尽可能添加数据而不是删除或修改数据
分支操作非常快捷流畅(基于指针实现,因此创建分支很快)
与 Linux 命令全面兼容
基于行情来管理文件的变动
git本地分区
git本地分为三个区域:
工作区—>暂存区---->本地库
工作区:就是我们写代码的区域
暂存区:临时存储区
本地库:本地的仓库,如果要推送到远端 需要先提交到本地库
git常用命令
本地库初始化
git init
此命令会在当前目录创建一个.git的隐藏文件夹,存放git用来管理版本的文件
设置签名
用来区分不同开发人员的身份,这里设置的签名和登陆远程仓库的账号、密码没有任何关系。
设置系统级别的签名,对当前系统有效;信息保存位置:~/.gitconfig 文件
git config --global user.name "zhangsan"
git config --global user.email "123456@qq.com"
设置项目级别签名:项目级别的签名只在当前项目有效;信息保存位置:./.git/config 文件
git config user.name "zhangsan"
git config user.email "123456@qq.com"
优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有不允许
基本操作
git status 查看工作区、暂存区状态
git add【fileName】 将工作区的"新建/修改"添加到暂存区
git commit -m "commit message" [fileName] 将暂存区的修改提交到本地库
git commit -am “commit message” 直接将工作区的文件提交到本地库
查看本地的历史版本记录
git log 多行显示
git log --pretty=oneline 单行显示
6d3042d38f0536de3b07e1d578f366ad62f8c625 (HEAD -> master) my third commit
2218863d35feca7e4d2984c6454577ed3afb730a my sencond commit.good.txt modify
fe04652cb9a0bf031ce444e3d1381f3f9fdd118d my first commit.create new file good.txt
git log --oneline
6d3042d (HEAD -> master) my third commit
2218863 my sencond commit.good.txt modify
fe04652 my first commit.create new file good.txt
git reflog 单行显示,HEAD@{移动到当前版本需要多少步}
6d3042d (HEAD -> master) HEAD@{0}: commit: my third commit
2218863 HEAD@{1}: commit: my sencond commit.good.txt modify
fe04652 HEAD@{2}: commit (initial): my first commit.create new file good.txt
版本穿梭
基于索引值操作[推荐]
git reset --hard [局部索引值]
git reset --hard a6ace91
使用^符号:只能后退
git reset --hard HEAD^
注:一个^表示后退一步,n 个表示后退 n 步
使用~符号:只能后退
git reset --hard HEAD~n
注:表示后退 n 步
reset 命令的三个参数对比
--soft 参数
仅仅在本地库移动 HEAD 指针
--mixed 参数
1在本地库移动 HEAD 指针
2重置暂存区
--hard 参数
在本地库移动 HEAD 指针
重置暂存区
重置工作区
文件比较
git diff [文件名]
将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名]
将工作区中的文件和本地库历史记录比较
不带文件名比较多个文件
分支操作
分支的好处
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任 何影响。失败的分支删除重新开始即可。
创建分支
git branch [分支名]
查看分支
git branch -v
切换分支
git checkout [分支名]
合并分支
第一步:切换到接受修改的分支(被合并,增加新内容)上
git checkout [被合并分支名]
第二步:执行 merge 命令
git merge [有新内容分支名]
冲突的解决
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息"
注意:此时 commit 一定不能带具体文件名
删除本地分支
git branch -d 分支名
git branch -D 分支名 强制删除
删除远程分支
git push origin --delete 分支名 或
git push origin :分支名
远程库操作
创建远程库地址别名
git remote -v 查看当前所有远程地址别名
git remote add [别名] [远程地址]
推送
git push [远程库别名] [分支名]
克隆
git clone 远程地址
拉取
git pull [远程库地址别名] [远程分支名]