git的基本使用

Git基本介绍

Git结构

image-20210629225720590

托管中心

  • 作用:维护远程库
  • 内网:可以自己搭建一个GitLab服务器
  • 外网:可以使用码云、Github

本地库和远程库

  • 团队内部合作

    image-20210629230232837
  • 团队外部合作

    image-20210629230319068

Git命令行操作

1.1本地库初始化

进入文件夹weChat(项目目录)

image-20210629231445865

git init
注意:生成的 .git 目录中存放的是本地库相关文件,不要删除,也不要修改

1.2设置签名

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

    git config user.name tom  #设置用户名tom
    git config user.email liu@qq.com #设置用户邮箱
    作用:区别不同开发人员的身份
    辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
    信息保存位置:~/.gitconfig 文件
    
    image-20210629232345500
  • 系统用户级别仅在当前登录的操作系统用户有效

    git config --global user.name tom
    git config --global user.email liu@qq.com
    

仅仅加了一个 --global

优先级别:项目级别 > 系统级别

信息保存位置:~/.gitconfig 文件

1.3基本操作

1.3.1 状态查看
git status   #查看工作区、暂存区状态

image-20210629233333473

1.3.2 添加
git add fileName  #添加指定文件到暂存区(第一次创建文件智能先add,后面可以直接提交)
git rm --cached filename	#从暂存区删除指定文件
git add . #所有
说明:将工作区的文件添加到暂存区
1.3.3 提交
git commit fileName	会进入vim编辑器,输入修改相关信息
git commit -m 'commit message' fileName	 直接带-m参数,后面添加消息,不用进入vim
说明:将暂存区内容提交到本地库

image-20210629233956882

image-20210629234637723

1.3.4 查看历史记录
git log # 显示最全
git reflog  #提示HEAD移动到之前版本需要的步数
git log --greph #图形显示,更直观
git log --pretty=oneline #漂亮 一行显示一条提交记录
git log --oneline #简洁显示,其中哈希值只显示一部分
说明:HEAD@{移动到之前版本需要多少步}	HEAD指向当前版本

image-20210629235135196

image-20210629235820732

image-20210629235844377

image-20210629235921372

image-20210629235950756

1.3.5 前进后退
  • 基于索引值推荐

    git reset --hard 指针位置
    例子:git reset --hard a6ace91 #回到这个状态
    
  • 使用 ^ 符号只能后退

    git reset --hard HEAD^
    例子:git reset --hard HEAD^^
    注意:几个 ^ 表示后退几步
    
  • 使用 ~ 符号只能后退

    git reset --hard HEAD~n
    例子:git reset --hard HEAD~3
    
1.3.6 reset的三个参数比较
git reset --help	查看命令的详细信息
soft: 
  - 仅本地库移动HEAD 指针
mixed:
  - 在本地库移动HEAD指针
  - 重置暂存区
hard:
  - 在本地库移动HEAD指针
  - 重置暂存区
  - 重置工作区
1.3.7 删除文件并找回
  • 前提:删除前,文件存在时的状态提交到了本地库。
git reset --hard [指针位置]	只需要移动到之前没有删除文件的版本
- 删除操作已经提交到本地库:指针位置指向历史记录 
- 删除操作尚未提交到本地库:指针位置使用 HEAD
1.3.8 文件差异比较
git diff 文件名	将工作区中的文件和暂存区进行比较
git diff 哈希值 文件名  将工作区中的文件和本地库历史记录比较
git diff  不带文件名,则比较多个文件

2.2 分支管理

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

    image-20210630150226131
2.2.2 分支的好处
  • 同时并行推进多个功能开发,提高开发效率
  • 某一分支开发失败,不会对其它分支有任何影响
2.2.3 分支操作
  • 创建分支
git branch 分支名
  • 查看分支
git branch
git branch -v 
  • 切换分支
git checkout 分支名
git checkout -b 分支名   #创建分支并直接切换到该分支
  • 合并分支相当于把修改了的文件拉过来
git merge xxx
注意:合并分支的时候要明确谁谁合并
	我在a分支里面修改了。要合并到master,就先切换到master,然后合并a
  • 删除分支
git branch -d 分支名
2.2.4 解决冲突
  • 冲突的表现

    image-20210630151743026

  • 冲突的解决

    • 第一步:编辑,删除特殊标记<<< ===
    • 第二步:修改到满意位置,保存退出
    • 第三步:添加到缓存区 git add 文件名
    • 第四步:提交到本地库git commit -m '日志信息' 注意:后面一定不能带文件名

    image-20210630152052288

Git基本原理

1. 哈希

image-20210630152423485

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:

1.不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。 
2.哈希算法确定,输入数据确定,输出数据能够保证不变 
3.哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大 
4.哈希算法不可逆 

Git 底层采用的是 SHA-1 算法。

**哈希算法可以被用来验证文件。**原理如下图所示。Git 就是靠这种机制来从根本上保证数据完整性的。

image-20210630152817000

2. Git保存版本的机制

2.1 集中式版本控制工具的文件管理机制

**只保存变化的部分。**以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本 文件和每个文件随时间逐步累积的差异。

image-20210630153129936

Git 的文件管理机制

Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前 的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的工作方式可以称之为快照流。

image-20210630153631291

git的提交管理

Git 的“提交对象” ,每个文件对象都被hash,生成一颗hash树,提交对象中保存hash树的hash值

image-20210630153839984

提交对象及其父对象形成的链条

image-20210630153912240

git的分支管理机制

创建分支就是创建新的指针,切换分支就是切换指针指向的分支。

Git 结合Github

别分手 别名 分支名

1.1 创建远程库地址别名
git remote -v  #查看远程地址别名
git remote add 别名 远程地址 
例子:git remote add origin https://xx
1.2 推送

开发修改完把本地库的文件推送到远程仓库 前提是提交到了本地库才可以推送

git push 别名 分支名
git push -u 别名 分支名    #-u指定默认主机
例子:git push origin master
1.3 克隆

完整的把远程库克隆到本地 克隆下来后不要在主分支里面做开发 clone进行一次,从无到有的过程,更新用pull

push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!

git clone  远程地址
例子:git clone https://xx
1.4 拉取

本地存在clone下来的文件 就用pull更新

pull = fetch + merge
	git fetch [别名] [分支名]
	git merge [别名/分支名]
git pull [别名] [分支名]
1.5 解决冲突

注意:解决冲突后的提交是不能带文件名的

如果不是基于远程库最新版做的修改不能推送,必须先pull下来安装冲突办法解决

1.6 rebase

提交记录简洁不分叉 没学懂,感觉有点鸡肋 混眼熟

git rebase -i 索引号
git rebase -i HEAD~3  #合并最近三条记录
说明:在vim编辑里面改成s
1.7 beyond compare

用软件解决冲突

1.安装 :
   beyond compare 
2.配置:
   git config --local merge.tool bc3  #合并名称
   git config --local mergetool.path '/usr/local/bin/bcomp' #软件路径
   git config --local mergetool.keepBackup false  #False不用保存备份
3.应用:
   git mergetool
说明:--local指只在当前操作系统有效
1.8 跨团队合作

代码review之后合并

  • 适用于个人

    邀请成员:Settings --> Collaborators -->填写用户名 -->打开链接接受邀请

  • 企业 创建一个组织 方便管理

  • review

    组织做review 通过Pull request

  • 给开源社区共享代码

    点击别人仓库的fork 到自己的仓库 – > 然后clone下来 修改后推送到远程库 --> 点击Pull Request请求 --> Create pull request发消息

1.9 Tag标签

为了清晰的版本管理,公司一般不会直接使用commit提交

git tag -a v1.0 -m '版本介绍'   #创建本地tag信息
git tag -d v1.0    		#删除tag
git push origin --tags   #将本地tag信息推送到远程库
git pull origin --tags    #拉取到本地

git checkout v.10    #切换tag
git clone -b v0.1 地址   #指定tag下载代码
1.10 SSH 免密登录
  • cd ~ 进入家目录,rm -r .ssh 删除.ssh目录
  • 输入:ssh-keygen -t rsa -C GitHub邮箱地址
  • 进入.ssh目录,复制id_rsa.pub文件内容
  • 登录GitHub。Settings --> SSH and GPG keys --> New SSH Key
  • 回到git通过ssh地址创建。git remote add 别名 SSH地址

Git工作流

1.1 概念
在项目开发过程中使用Git的方式
1.2 分类
1.2.1 集中式工作流
像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上
1.2.2 GitFlow工作流 *

主干分支master 开发分支develop 修复分支hotfix 预发布分支release 功能分支feature

GitFlow 有独立的分支,让发布迭代过程更流畅。
1.2.3 Forking 工作流
在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。 
安全可靠地管理大团队的开发者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值