GitHub教程

发布时间 2023-05-26 16:19:44作者: MyMemo

1. 概述

image

1.1 Git和代码托管中心

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

  • GitLab服务器

外网环境下:

  • GitHub
  • 码云

1.2 本地库和远程库

  • 团队内部协作
    image

  • 跨团队协作
    image

2. Git命令行操作

2.1 本地库操作

  • 命令:git init

  • 效果:
    image

  • 注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

2.2 设置签名

  • 形式
    用户名:tom
    Email地址:goodMorning@a.com
  • 作用:区分不同的开发人员
  • 辨析:这里设置的签名和登录远程库(代码托管中心)的账户、密码没有任何关系。
  • 命令
    • 项目级别/仓库级别:仅在当前本地库范围内有效
      • git config user.name tom_pro
      • git config user.email goodMorning_pro@a.com
      • 信息保存的位置:./.git/config文件
        image
    • 系统用户级别:登录当前系统的用户范围
      • git config --global user.name tom_glb
      • git config --global user.email goodMorning_glb@a.com
      • 信息保存位置:~/.gitconfig文件 (家目录下的.gitconfig文件)
        image
    • 级别优先级:
      • 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
      • 如果只有系统用户级别的签名,就以系统用户级别的签名为准
      • 二者都没有,不允许

2.3 基本操作

  • 状态查看操作
    • git status
      查看工作区、暂存区状态
      - git status输出的绿字表明:暂存区的内容与工作区一致,与本地库不一致(暂存区的内容即将要提交到本地库。此时提交到本地库后,三者的内容将一致)
      - git status输出的红字表明:暂存区的内容与工作区有不一致,但与本地库一致(此时要做的事情是,将工作区修改好的文件添加到暂存区,此时git status将会输出绿字)
    • 添加操作
      • git add [filename]
        将工作区的“新建/修改”添加到暂存区
      • 提交操作
        • git commit -m "commit message" [filename]
          将暂存区的内容提交到本地库
      • 查看历史记录操作
        • git log
        • 多屏显示控制方式:
          • 空格向下翻页
          • b 向上翻页
          • q 退出
      • git log --pretty=oneline
        image
      • git log --oneline
        image
      • git reflog (在--oneline的基础上还显示了:HEAD指针到某个版本,需要移动几步)
        image

2.4 Git版本的前进、后退

  • 本质:HEAD是一个指针,指针可以指向过去的版本,即后退;后退之后,也可以再指向前面的版本,即前进。
    image

  • 基于索引值操作[推荐] (建议配合git reflog命令使用)
    git reset --hard [索引值]
    image
    image
    image

  • 使用^符号:只能后退,一个异或符号退1步
    git reset --hard HEAD^^^ (该命令后退3步)
    image

  • 使用~符号:只能后退,波浪线符合后的数字表示后退的步数
    git reset --hard HEAD~3 (该命令后退3步)
    image

2.5 git reset命令的三个参数对比

  • --soft

    • 不会碰暂存区和工作区。仅仅会在本地库移动HEAD指针
    • 执行命令 git reset --soft 9a9ebe0后,工作区的good.txt还是以eeeeee为最新的一行,和未执行该命令时相同。然而暂存区变成了“modified: good.txt”,为什么呢?因为本来在命令执行前,本地库、暂存区、工作区,三者是一致的(working tree clean)。但是后来通过执行命令,把本地库的HEAD指针往前(前进)移动了几个commit,此时三者的一致就被打破了,所以现在暂存区的内容并没有提交到本地库指针现在指向的位置(或者说本地库后退或前进了,就显得暂存区变化了),实际上暂存区的内容没有变化。所以暂存区变成绿字,不是它变了,而是本地库的指针发生了变化。
      image
      --
      image
      --
      image
      --
      image
      --
      image
  • --mixed

    • 在本地库移动HEAD指针
    • 重置暂存区(用指针指向的commit)

    基于上图的git reflog命令的结果,执行命令:git reset --mixed 42e7e84,命令执行后,工作区没有改变,而本地库、暂存区往后移动了几个commit。
    暂存区目前是红字,但实际上没有变化,如何理解?该命令使得本地库、暂存区都往后移动了几个commit,工作区没有移动,所以就显得工作区往前走了(被改动了,所以就变成红字了)。
    image

  • --hard

    • 在本地库移动HEAD指针
    • 重置暂存区(用指针指向的commit)
    • 重置工作区(用指针指向的commit)

    git reset --hard xxxxxx 该命令会让三者(本地库、暂存区、工作区)同时“移动”。即移动了本地库的指针,然后将暂存区、工作区刷新为当前指针指向的commit对应的内容。
    一般来说,前--soft和--mixed用的少。

2.6 删除文件并找回