首页 > 技术文章 > Git使用心得

chx-guo 2020-10-18 21:37 原文

参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg 

1.版本控制

  • 版本控制简介

    工程设计领域中使用版本控制管理工程蓝图的设计过程。在IT开发过程中也可以使用版本控制思想管理代码的版本迭代。

  • 版本控制工具
  1. 集中式:CVS、SVN、VSS......
  2. 分布式:Git、Mercurial、Darcs......
  • 版本控制工具应该具有的功能:
  1. 系统修改
  2. 数据备份
  3. 版本管理
  4. 权限控制  --对团队外开发者贡献的代码进行审核--Git独有。
  5. 历史记录
  6. 分支管理

2.Git简介

  • Git简史

 

 

 

  •  Git的优势
  1. 大部分操作在本地完成,不需要联网
  2. 完整性保证
  3. 尽可能添加数据而不是删除或修改数据
  4. 分支操作非常快捷流畅
  5. 与Linux命令完全兼容
  • Git结构
  1. 工作区:写代码
  2. 暂存区:临时存储
  3. 本地库:历史版本

    工作区--git add-->暂存区--git commit-->本地库

  • Git和代码托管中心

    代码托管中心的任务:维护远程库

  1. 局域网环境下:GitLab服务器
  2. 外网环境下:GitHub、码云

3.Git命令行操作

  • 本地库初始化
  1. 命令:git init
  2. 效果
  3. 注意:.git目录中存的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

             

 

 

            

  • 设置签名
  1. 形式
    1. 用户名:
    2. Email地址
  2. 作用:区分不同开发人员的身份
  3. 命令
    1. 项目级别/仓库级别:仅在当前本地库范围内有效
      1. git config user.name tom
      2. git config user.email tom@qq.com
    2. 系统用户级别:登录当前操作系统的用户范围
      1. git config --global user.name tom_glb
      2. git config --global user.email tom_glb@qq.com
  • 基本操作
  1. 状态查看
    1. git status
    2. 查看工作区、暂存区状态

 

  1. 添加操作
    1. git add [file name]
    2. 将工作区的“新建/修改”添加到暂存区
  2. 提交操作
    1. git commit -m "commit message" [file name]
    2. 将暂存区的内容提交到本地库
  3. 查看历史记录操作
    1. git log
    2. git log --pretty=oneline
    3. git log --oneline:该命令只能显示HEAD之后的版本
    4. git reflog:该命令可以显示所有的版本
    5.  HEAD@{移动到当前版本需要多少步}

  4. 版本前进后退
    1. 本质:git维护一个HEAD指针指向当前的工作区的版本,所以实现版本的前进后退就是操作HEAD指针前进后退。
    2. 基于索引值操作【推荐】
      1. git reset --hard[局部索引值]
      2. $ git reset --hard 892c6d0

    3. 使用^符号
      1. 该符号只能后退,一个^表示后退一步
      2. git reset --hard HEAD^
      3.  后退一个版本

    4. 使用~符号
      1. 该符号只能后退,可以后退多步
      2. git reset --hard HEAD~3
      3.  后退三个版本

  5. reset命令的三个参数对比
    1. soft
      • 仅仅在本地库移动HEAD指针
    2. mixed
      • 在本地库移动HEAD指针
      • 重置暂存区
    3. hard
      • 在本地库移动HEAD指针
      • 重置暂存区
      • 重置工作区
  6. 删除文件并找回
    1. 前提:删除前,文件存在时的状态提交到了本地库。
    2. 操作:git reset --hard[指针位置] 
    3. 删除操作已经提交到本地库:指针位置指向文件存在时的历史记录。
    4. 删除操作尚未提交到本地库:指针位置使用HEAD。
  7. 比较文件差异
    1. git diff [文件名]
      1. 将工作区的文件和暂存区进行比较
    2. git diff [本地库中的历史版本] [文件名]
      1. 将工作区的文件和本地库历史记录比较。
    3. 不带文件名比较多个文件
  8. 分支管理
    1. 什么是分支:在版本控制中,使用多条线同时推进多个任务。
    2. 分支的好处
      1. 同时并行推进多个功能开发,提高开发效率
      2. 各个分支在开发过程中,如果某一个分支开发失败,不会对分支有任何影响,失败的分支删除重新开始即可。
    3. 分支操作
      1. 创建分支:git branch [分支名]
      2. 查看分支:git branch -v
      3. 切换分支:git checkout [分支名]
      4. 合并分支
        1. 切换到接受修改的分支上:git checkout[分支名]
        2. 执行merge命令:git merge [要合并的分支名]
      5. 解决冲突
        1. 冲突的表现
        2. 冲突的解决
          1. 第一步:编辑文件,删除特殊符号。
          2. 第二步:把文件修改到满意的程度。
          3. 第三步:git add [文件名]
          4. 第四步:git commit -m "日志信息" 。 注意:此时commit一定不能带具体的文静名。
  • Git基本原理
  1. 保存版本的机制:以文件变更列表的方式存储信息。这类系统将它们保存的信息看做是一组基本文件和每个文件 随时间逐步累积的差异。
  2. Git的文件管理机制:Git把数据看作是小型的文件系统的一组快照。每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有被修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以Git的工作方式可以称为快流照。
  3. Git的分支管理机制: 本质是创建和移动指针。
    1. 分支的创建:本质创建指针。
    2. 切换分支:本质是改变HEAD指针的指向。
  • 和远程库交互
  1. 在本地仓库创建远程库的别名
    1. git remote add [别名] [远程库地址]
  2. 推送
    1. git push [别名] [分支名]
  3. 克隆
    1. git clone [远程地址]
  4. 拉取
    1. pull=fetch+merge
    2. git fetch [远程库地址别名] [远程分支名]
    3. git merge [远程地址别名/远程分支名]
  5. 协同开发时冲突的解决
    1. 如果不是基于远程库的最新版所做的修改,不能推送,必须先拉取。
    2. 拉取下来后如果进入冲突状态,则按照“分支冲突”解决即可。
  6. 场景四的完整演练
    1. 题目:在Github.com或Gitee.com上新建一个版本库,并实现如下 commit 网络结点示意图,要求 A 和 B 在本地存在过,但并不出现在远程网络图中。
    2. 第一步;在Gitee上新建版本库myrebase;
    3. 第二步:将mybase远程库clone到本地:
    4. 第三步:创建新分支test;
    5. 第四步:在master分支上提交三次
    6. 第五步:切换为分支test 并提交两次
    7.  

       test分支上的一个版本在本地库中存在过。

    8. 第六步:使用rebase命令将最后一次提交删除。
    9.  

       可以看到b版本已经不在(d and e 版本是之前的c版本,只不过将日志文件改为了d and e)

    10. 第七步:两分支合并
    11. 第八步:push到远程库
    12.  

       可以看到远程库中并没有d版本,而有d and e版本。

 

推荐阅读