Git入门到精通

Git入门到精通

  • 一. 什么是Git
    • 1.1 Git简介
    • 1.2 Git的优点
  • 二. Git和Svn的区别
  • 三. Git下载与安装
    • 3.1 下载Git
  • 四. Git结构
  • 五. Git和代码托管中心
    • 5.1 代码托管中心
    • 5.2 本地库与远程库
    • 5.3 团队内部协作流程
    • 5.4 跨团队协作
  • 六. Git命令行
    • 6.1 创建本地库
    • 6.2 设置签名
      • 6.2.1 签名概述
      • 6.2.2 签名命令
    • 6.3 常用命令
    • 6.4 永久删除后找回
    • 6.5 文件比较
  • 七. 本地库和远程库的交互
    • 7.1 初始化本地库与远程库建立连接
    • 7.2 克隆与远程库建立连接
    • 7. 3 切换远程库
  • 八. 分支
    • 8.1 分支概念
    • 8.2 分支命令
    • 7.3 合并分支(冲突)解决

一. 什么是Git

Git官网地址https://git-scm.com/
Git源码https://github.com/git/git/

1.1 Git简介

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是李纳斯·托沃兹( Linus Torvalds )为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

1.2 Git的优点

  • 大部分操作在本地完成,不需要联网
  • 速度快、灵活
  • 尽可能添加数据而不是删除或修改数据
  • 分支操作非常快捷流畅
  • 与 Linux命令全面兼容

二. Git和Svn的区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git入门到精通_第1张图片

三. Git下载与安装

3.1 下载Git

Git管网下载https://git-scm.com/downloads

Git入门到精通_第2张图片
执行exe文件
一直点next
Git入门到精通_第3张图片
桌面鼠标右击,出现
Git入门到精通_第4张图片
Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

四. Git结构

工作区:就是你在电脑里能看到的目录(写的代码存在工作区)。
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件 (.git/index)中,所以我们把暂存区有时也叫作索引(index).(计划要提交的文件)
版本库:(本地库)工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git入门到精通_第5张图片

五. Git和代码托管中心

5.1 代码托管中心

代码托管中心的任务:维护远程库
局域网环境下:

  • GitLab服务器

外网环境下:

  • GitHubhttps://github.com/
  • 码云https://gitee.com/

5.2 本地库与远程库

团队内部协作和跨团队协作

5.3 团队内部协作流程

Git入门到精通_第6张图片

5.4 跨团队协作

Git入门到精通_第7张图片

六. Git命令行

6.1 创建本地库

右键进入git bash here

mkdir blog  创建文件   
cd blog     进入blog
ll -A       查看隐藏的.git文件内容
git init    初始化一个 Git 仓库
ll .git/    表示查看.git 下的文件列表显示
cat .git/config     查看.git/config 内容   

注意:.git目录是存放本地库相关的目录和文件,不要对其进行修改和操作

6.2 设置签名

6.2.1 签名概述

  1. 签名的作用:用于标识不同的开发人员
  2. 项目级别(仓库):仅在当前本地库范围有效
  3. 系统级别:登录当前操作系统的用户范围
  4. 级别优先级:就近原则:项目级别优先级大于系统(用户)级别签名

注意:签名级别必须要设置,如果都不设置,GIT可能会导致命令出差。无法辨别

6.2.2 签名命令

项目级别(仓库):仅在当前本地库范围有效

 git config user.name zysheep
 git config user.email [email protected]
 cat .git/config  查看设置结果

系统级别:登录当前操作系统的用户范围

 git config –global user.name zysheep
 git config –global user.email [email protected]
 cd ~  家目录
 ll –A | grep –i git   查看叫git的文件名称
 cat .gitconfig 查看文件内容

在实际开发过程中,通常只需要设置系统级别即可。如果有特殊需要,再设置项目级别。

6.3 常用命令

 git tatus  用于显示工作目录和暂存区的状态
 git add    xxx.txt 将工作区写入暂存区
 git rm     命令用于从工作区和索引中删除文件。
 git commit -m '备注信息'  将暂存区提交到本地库
 git checkout   切换分支或恢复工作树文件
 git log        显示提交日志信息
 git log –-pretty=oneline 更优雅的显示(查看历史记录)
 Git log --oneline
 git reflog   //用于显示需要回退的步骤HEAD

6.4 永久删除后找回

git rm 命令用于从工作区和索引中删除文件。

  1. 工作区创建文件,通过命令提交到本地库
 Vim d1.txt  
 git add d1.txt  
 git commit –m ‘上传到本地库d1.txt’ d1.txt
  1. 执行命令进行删除:
git rm d1.txt 工作区删除后,提交到本地库
git commit –m ‘删除d1.txt’ d1.txt
  1. 通过日志git reflog 找回
$ git reset --hard 15d5002
ll查看即可

注意: git只要在本地库发生操作,都会进行版本记录。

6.5 文件比较

gid diff 将工作区中的文件和暂存区进行比较

vim git.txt    修改内容
git diff git.txt       用于显示提交和工作树等之间的更改

gid diff 暂存区中的文件和本地库进行比较

git add git.txt 将git.txt 工作区添加到暂存区 
git diff HEAD git.txt   HEAD代表本地库最新版本指针    
git diff  不加文件名
git checkout 文件名   退回修改  

七. 本地库和远程库的交互

7.1 初始化本地库与远程库建立连接

  1. git remote -v 查看当前所有远程地址别名

  1. git remote add [别名][远程地址]


  1. 推送 git push [别名] [分支名]

Git入门到精通_第8张图片

出现以上错误,是因为目录中没有文件,空目录是不能提交上去的。

我们在目录中添加一个文件,使用git add加入到暂存区,git commit提交到本地库中。

Git入门到精通_第9张图片

可能要设置签名(设置全局签名吧,否则设置项目级别的前面,后面再创建本地仓库,又得重新设置),设置完成后,再git commit,最后再git push

Git入门到精通_第10张图片

这是因为github上的远程库与本地库版本不一致导致的。我们根据提示先pull,再push

git pull origin master
git push origin master

git pull 失败 ,提示:fatal: refusing to merge unrelated histories,这是因为两个根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并。有两种解决方法:

  • 第一种:从远端库拉下来代码, 本地要加入的代码放到远端库,然后提交上去,这相当于是一种更新;
  • 第二种:强制拉取git pull origin master --allow-unrelated-histories

总结: 创建远程仓库,本地仓库初始化后,使用git pull拉取,保持本地库与远程库版本一致。

7.2 克隆与远程库建立连接

git clone [远程地址]

克隆操作为我们做了这些事情:

  • 完整的把远程库下载到本地
  • 创建远程库地址别名:origin
  • 初始化本地库

如果已经找到远程库,推荐使用克隆来与远程库建立连接

7. 3 切换远程库

方式一:修改远程仓库地址

git remote  -v  #  查看远程仓库的地址

git remote set-url origin Url  # 更换远程仓库地址,Url为新地址。

方式二:先删除远程仓库地址,然后再添加

git remote rm origin   # 删除现有远程仓库
git remote add origin url   # 添加新远程仓库

八. 分支

8.1 分支概念

  1. 什么是分支?
    在版本控制过程中,使用多条线同时推进多个任务。

Git入门到精通_第11张图片

  1. 分支的好处?
  • 同时并行推进多个功能开发,提高开发效率
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任
    何影响。
  • 失败的分支删除重新开始即可

8.2 分支命令

  1. 创建分支
git branch develop
  1. 查看本地分支:
git branch

注: 名称前面加* 号的是当前的分支

  1. 查看远程分支:

加上-a参数可以查看远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话)

git branch -a
  1. 切换分支
git checkout branch_name
  1. 删除本地分支
git branch -d branch_name
  1. 删除远程分支
git branch -r -d origin/branch-name  
git push origin :branch-name 
  1. 如果远程新建了一个分支,本地没有该分支。

可以利用 git checkout --track origin/branch_name ,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。

git checkout --track origin/branch_name
  1. 如果本地新建了一个分支 branch_name,但是在远程没有。

这时候 push pull 指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branch_name ,这样就可以自动在远程创建一个 branch_name 分支,然后本地分支会 track 该分支。后面再对该分支使用 push 和 pull 就自动同步。

git push --set-upstream origin branch_name
  1. 合并分支到master上
    首先切换到master分支上
git  checkout master

如果是多人开发的话 需要把远程master上的代码pull下来

git pull origin master

然后我们把dev分支的代码合并到master上

git  merge dev

然后查看状态

git status

示例 :合并分支

  1. 在分支hot_fix 上修改git.txt文件,并提交到本地库
  2. 需要合并分支。让master上的git.txt同步

切换到接受修改的分支上master(将hot_fix内容同步到master

git checkout master   //切换到接受修改的分支上

执行merge命令,git merge命令用于将两个或两个以上的开发历史加入(合并)一起。

git merge hot_fix   //hot_fix 被合并的分支名称

7.3 合并分支(冲突)解决

问题:将两个分支内的文件分别进行修改.(且改变的是同一位置)进行合并。

1、查看分支信息:

 git branch -v

2、在master下修改某行文件内容。然后进行提交。

vim git.txt  
git add git.txt
git commit –m ‘master 提交’ git.txt

Git入门到精通_第12张图片
3、查看分支信息

git branch -v


4、在hot_fix下修改某行(master)同行文件内容。然后进行提交

git checkout hot_fix
vim git.txt
git add git.txt
git commit –m ‘hot_fix提交’ git.txt

Git入门到精通_第13张图片
查看版本信息:

Git入门到精通_第14张图片

合并:

git merge master  //在hot_fix中向master中合并代码

Automatic merge failed; fix conflicts and then commit the result.(自动合并失败;修复冲突,然后提交结果。)

Git入门到精通_第15张图片
查看文件(冲突的):
cat git.txt
Git入门到精通_第16张图片
处理冲突:

  • 由人为沟通解决。
  • 进行文件编辑

修改文件:

vim git.txt   // (将冲突的符号清除。进行修改内容)
git add  git.txt
git commit –m ‘冲突已修复’//不需要带文件名称

Git入门到精通_第17张图片

你可能感兴趣的:(#,代码版本控制管理,git)