一. 什么是Git
Git官网地址https://git-scm.com/
1.1 Git简介
- Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- Git 是李纳斯·托沃兹( Linus Torvalds )为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
- Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
1.2 Git的优点
- 大部分操作在本地完成,不需要联网
- 速度快、灵活
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与 Linux命令全面兼容
二. Git和Svn的区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
三. Git下载与安装
3.1 下载Git
执行exe文件
一直点next
桌面鼠标右击,出现
Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
四. Git结构
工作区:就是你在电脑里能看到的目录(写的代码存在工作区)。
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件 (.git/index)中,所以我们把暂存区有时也叫作索引(index).(计划要提交的文件)
版本库:(本地库)工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
五. Git和代码托管中心
5.1 代码托管中心
代码托管中心的任务:维护远程库
局域网环境下:
- GitLab服务器
外网环境下:
5.2 本地库与远程库
团队内部协作和跨团队协作
5.3 团队内部协作流程
5.4 跨团队协作
六. Git命令行
6.1 创建本地库
右键进入git bash here
1 | mkdir blog 创建文件 |
注意:.git目录是存放本地库相关的目录和文件,不要对其进行修改和操作
6.2 设置签名
6.2.1 签名概述
- 签名的作用:用于标识不同的开发人员
- 项目级别(仓库):仅在当前本地库范围有效
- 系统级别:登录当前操作系统的用户范围
- 级别优先级:就近原则:项目级别优先级大于系统(用户)级别签名
注意:签名级别必须要设置,如果都不设置,GIT可能会导致命令出差。无法辨别
6.2.2 签名命令
项目级别(仓库):仅在当前本地库范围有效
1 | git config user.name zysheep |
系统级别:登录当前操作系统的用户范围
1 | git config –global user.name zysheep |
在实际开发过程中,通常只需要设置系统级别即可。如果有特殊需要,再设置项目级别。
6.3 常用命令
1 | git tatus 用于显示工作目录和暂存区的状态 |
6.4 永久删除后找回
git rm 命令用于从工作区和索引中删除文件。
- 工作区创建文件,通过命令提交到本地库
1 | Vim d1.txt |
- 执行命令进行删除:
1 | git rm d1.txt 工作区删除后,提交到本地库 |
- 通过日志git reflog 找回
1 | $ git reset --hard 15d5002 |
注意: git只要在本地库发生操作,都会进行版本记录。
6.5 文件比较
gid diff 将工作区中的文件和暂存区进行比较
1 | vim git.txt 修改内容 |
gid diff 暂存区中的文件和本地库进行比较
1 | git add git.txt 将git.txt 工作区添加到暂存区 |
七. 本地库和远程库的交互
7.1 初始化本地库与远程库建立连接
git remote -v
查看当前所有远程地址别名
git remote add
[别名][远程地址]
- 推送
git push [别名] [分支名]
出现以上错误,是因为目录中没有文件,空目录是不能提交上去的。
我们在目录中添加一个文件,使用git add
加入到暂存区,git commit
提交到本地库中。
可能要设置签名(设置全局签名吧,否则设置项目级别的前面,后面再创建本地仓库,又得重新设置),设置完成后,再git commit
,最后再git push
。
这是因为github
上的远程库与本地库版本不一致导致的。我们根据提示先pull
,再push
。
1 | git pull origin master |
若git pull
失败 ,提示:fatal: refusing to merge unrelated histories
,这是因为两个根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并。有两种解决方法:
- 第一种:从远端库拉下来代码, 本地要加入的代码放到远端库,然后提交上去,这相当于是一种更新;
- 第二种:强制拉取
git pull origin master --allow-unrelated-histories
总结: 创建远程仓库,本地仓库初始化后,使用git pull
拉取,保持本地库与远程库版本一致。
7.2 克隆与远程库建立连接
1 | git clone [远程地址] |
克隆操作为我们做了这些事情:
- 完整的把远程库下载到本地
- 创建远程库地址别名:origin
- 初始化本地库
如果已经找到远程库,推荐使用克隆来与远程库建立连接
7. 3 切换远程库
方式一:修改远程仓库地址
1 | git remote -v # 查看远程仓库的地址 |
方式二:先删除远程仓库地址,然后再添加
1 | git remote rm origin # 删除现有远程仓库 |
八. 分支
8.1 分支概念
- 什么是分支?
在版本控制过程中,使用多条线同时推进多个任务。
2. 分支的好处?
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任
何影响。 - 失败的分支删除重新开始即可
8.2 分支命令
- 创建分支
1
git branch develop
- 查看本地分支:
1
git branch
注: 名称前面加* 号的是当前的分支
- 查看远程分支:
加上-a参数可以查看远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话)
1 | git branch -a |
- 切换分支
1
git checkout branch_name
- 删除本地分支
1
git branch -d branch_name
- 删除远程分支
1
2git branch -r -d origin/branch-name
git push origin :branch-name - 如果远程新建了一个分支,本地没有该分支。
可以利用 git checkout --track origin/branch_name
,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。
1 | git checkout --track origin/branch_name |
- 如果本地新建了一个分支 branch_name,但是在远程没有。
这时候 push
和 pull
指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branch_name
,这样就可以自动在远程创建一个 branch_name 分支,然后本地分支会 track 该分支。后面再对该分支使用 push 和 pull 就自动同步。
1 | git push --set-upstream origin branch_name |
- 合并分支到master上
首先切换到master分支上如果是多人开发的话 需要把远程master上的代码pull下来1
git checkout master
然后我们把dev分支的代码合并到master上1
git pull origin master
然后查看状态1
git merge dev
1
git status
示例 :合并分支
- 在分支hot_fix 上修改git.txt文件,并提交到本地库
- 需要合并分支。让master上的git.txt同步
切换到接受修改的分支上master
(将hot_fix
内容同步到master
)
1 | git checkout master //切换到接受修改的分支上 |
执行merge命令,git merge命令用于将两个或两个以上的开发历史加入(合并)一起。
1 | git merge hot_fix //hot_fix 被合并的分支名称 |
##7.3 合并分支(冲突)解决
问题:将两个分支内的文件分别进行修改.(且改变的是同一位置)进行合并。
1、查看分支信息:
1 | git branch -v |
2、在master下修改某行文件内容。然后进行提交。
1 | vim git.txt |
3、查看分支信息
1 | git branch -v |
4、在hot_fix下修改某行(master)同行文件内容。然后进行提交
1 | git checkout hot_fix |
查看版本信息:
合并:
1 | git merge master //在hot_fix中向master中合并代码 |
查看文件(冲突的):cat git.txt
处理冲突:
- 由人为沟通解决。
- 进行文件编辑
修改文件:
1 | vim git.txt // (将冲突的符号清除。进行修改内容) |
![][18]