再也不用担心忘记git命令了

·  阅读 2094

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

一、git结构

git结构

二、git命令行操作

2.1本地库初始化

1.命令:

git init

2.步骤&结果:

  • 首先用cd命令进入项目的目录
  • 执行git init命令
  • 产生一个.git隐藏文件(不要修改此文件)

2.2设置签名

  1. 形式
用户名:tom
Email地址:goodMorning@guigu.com
复制代码
  1. 作用:区分不同开发人员的身份
  2. 辨析:这里设置的签名和登陆远程库(GitHub)的账号密码没有任何关系
  3. 命令
    1. 项目级别/仓库级别:仅在当前本地库范围内有效
      • 命令
      git config user.name tom_pro
      git config user.email goodMorning_pro@guigu.com
      复制代码
      • 信息保存位置:./.git/config文件
    2. 系统用户级别:登陆当前操作系统的用户范围
      • 命令
      git config --global user.name tom_glb
      git config --global goodMorning_pro@guigu.com
      复制代码
      • 信息保存位置:~/.gitconfig文件
    3. 级别优先级
      • 就近原则:项目级别优先于用户级别,二者都有时采用项目级别的签名
      • 如果只有系统用户级别的签名,就以系统用户级别的签名为准
      • 二者不能同时没有

2.3基本操作

  1. 状态查看操作
git status
//查看工作区、暂存区的状态
复制代码
  1. 添加
git add[file name]
//将工作区的“新建/修改”添加到暂存区
复制代码
  1. 提交
git commit -m "explain message" [file name]
//将暂存区的内容添加到本地库
复制代码
  1. 查看历史纪录
    1. 完整查看
      • 命令
      git log
      复制代码
      • 效果
    2. 单行显示
      • 命令
      git log --pretty=oneline
      复制代码
      • 效果
    3. 简洁单行显示
      • 命令
      git log --oneline
      复制代码
      • 效果
    4. 步骤显示
      • 命令
      git reflog
      复制代码
      • 效果
      • 注释:
      HEAD@{移动到当前版本需要多少步}
  2. 前进后退
    1. 本质:git有一个指针HEAD指向当前所在的版本,历史上的每个版本都会以一个标识记录,通过HEAD指向来加以区分
    2. 基于索引值操作
    • 先用git reflog查看所有索引值
    • 回退命令
    git reset --hard[局部索引值]
    git reset --hard[9994d43]
    复制代码
    1. 使用^符号:只能后退
      git reset --hard HEAD^
      //一个^表示后退一步,n个表示回退n布
      复制代码
    2. 使用~符号:只能后退
      git reset hard HEAD~n
      //表示后退n步
      复制代码
  3. reset命令的三个参数对比
    1. soft参数
      • 仅仅在本地库移动HEAD指针
      • 解释:此时工作区和暂存区的内容相同,而本地库回退到了之前版本,因此暂存区就会显示成未commit状态
    2. mixed参数
      • 在本地库移动HEAD指针
      • 重置暂存区
      • 解释:此时工作区内容不变,而本地库和暂存区回到了之前的版本,因此工作区会显示成未add状态
    3. hard参数
      • 在本地库移动HEAD指针
      • 重置暂存区
      • 重置工作区
      • 解释:此时三个区域所有的内容都相同,但是全部都回退到了之前的版本
  4. 删除文件并找回
    1. 前提:删除前,文件已经别提交到了本地库
    2. 操作
    git reset --hard[指针位置(哈希序列)]
    复制代码
    • 删除操作已经提交到了本地库:指针位置指向历史记录
      //创建apple.txt文件
      vim apple.txt
      git add apple.txt
      git commit -m "new apple.txt" apple.txt
      //删除此文件,并把删除操作提交到本地库
      rm apple.txt
      git add apple.txt
      git commit -m "delete apple.txt" apple.txt
      //回退版本
      git reset -- hard[此处填写要恢复版本的哈希值]
      复制代码
    • 删除操作尚未提交到本地库
      git reset --hard HEAD
      /**此时因为为还没有把删除提交到本地库,
      *只需要把当前版本覆盖到工作区和暂存区即可
      */
      复制代码
  5. 比较文件差异
    1. 将工作区中的文件和暂存区进行比较
      //工作区文件修改后和暂存区进行比较
      git diff[文件名]
      复制代码
    2. 将工作区的文件和本地库历史版本进行比较
      //工作区修改文件后和本地库的内容进行比较
      git diff[本地库中历史版本,可以是哈希序列或者^,~][文件名]
      复制代码
    3. 不带文件名可以直接比较所有的文件
      //这个命令会比较工作区和暂存区所有修改过的文件
      git diff
      //同上
      git diff HEAD
      复制代码

2.4分支

  1. 什么是分支
    1. 在版本控制过程中,使用多条线同时推进多个任务
      • 如下图所示master为主分支,feature_blue和feature_game为新增加的功能(复制了master的内容,进行互相独立开发)
      • 开发完成后进行合并操作。合并到master分支,相当于版本迭代。
      • hot_fix相当于master出现了bug,将master复制到hot_fix进行热修复,最后再合并到master

2. 分支的好处

  1. 同时推进多个功能开发,提高开发效率
  2. 各个分支在开发过程中,如果某一个分支开发失败不会对其他分支产生任何影响。失败的分支删除重新开始即可。
  3. 分支操作
    1. 创建分支
    git branch[分支名]
    复制代码
    1. 查看分支
    git branch -v
    复制代码
    1. 切换分支
    git checkout[分支名]
    复制代码
    1. 合并分支(没有冲突的情况)
    • 第一步:切换到接受修改的分支上
    git checkout[接受修改的分支名]
    复制代码
    • 第二步:执行merge命令
    git merge[有新内容分支名]
    复制代码
    1. 解决冲突
      • 冲突的表现
      有冲突的文件处会显示两个冲突文件的所有内容,自己来编辑取舍

- 冲突的解决 - 第一步:编辑文件,删除特殊符号 - 第二步:把文件修改到满意的程度,保存退出 - 第三步:git add[文件名] - 第四步:git commit -m "日志信息" - 注意:此时commit一定不能带具体的文件名

三、GitHub

3.1 创建远程库别名

  1. 语法
//1、查看当前所有远程地址别名
git remote -v
//2、创建远程库别名(远程地址从github获取)
git remote add[别名][远程地址]
复制代码
  1. 效果

3.2推送

  1. 语法
git push[别名][分支名]
//别名从上一步获取,上传想要上传的分支
复制代码
  1. 效果

3.3克隆

  1. 命令
git clone[远程地址]
//远程地址同3.1取别名时的地址相同
复制代码
  1. 效果

3. 作用

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

3.4 团队成员邀请

3.5 拉取

  1. 解释
    • 别人在对文件进行修改以后,进行push操作修改了远程库。
    • 这时就需要把远程库的内容pull下来。
    • pull操作可以分解为两部:fetch和merge。提到merge就知道会分为冲突和不冲突两种
  2. 语法
//第一种(把pull分两步来做,能了解变化)
git fetch[远程库地址别名][远程分支名]
git merge[远程库地址别名/远程分支名]
//第二种(适用于不冲突的情况)
git pull[远程地址别名][远程分支名]
//pull = fetch + merge
复制代码
  1. 冲突解决
    • 如果不是基于GitHub远程库最新版本所做的修改,不能推送,必须先拉取
    • 拉取下来以后如果进入冲突状态,则按照“分支冲突解决”操作解决即可
分类:
开发工具
标签:
分类:
开发工具
标签: