第一章 Git基础

第一章 Git基础


目标

  1. 了解Git基本概念和常用命令的作用
  2. 能够使用Git命令来提交和管理项目代码

推荐:猴子都能懂的git入门教程

Learning git branching

扩展阅读

第一章 Git基础
第二章 GitHub基础
第三章 Git进阶
第四章 GitHub进阶

一、基本概念

1.1 什么是Git

免费的、开源的、分布式版本控制系统,管理项目和代码。快速高效地处理从小型到大型的各种项目。

易于学习,占地面积小,性能极快。

1.2 分布式版本控制工具 VS 集中式版本控制工具

  • 集中式版本控制工具
    • 集中式:CVS、SVN、VSS
    • 单点故障:中央服务器宕机,无法提供更新
  • 分布式版本控制工具

客户端提取的不是最新版本的文件快照,而是把代码仓库完整的镜像下来。任何一处文件损坏,其他客户端都有备份。每个客户端对于代码的拉取,都是一次拷贝。

1.3 什么是版本控制?

记录文件内容变化,以便将来查阅特定版本修订情况(版本有哪些变更)的系统。记录文件修改的历史记录,让用户能够查看历史版本,方便版本切换。

  • 为什么需要版本控制?

个人开发过渡到团队协作。

  • Git简史
    Git简史

1.4 什么是GitHub

Git和GitHub的作用、联系和区别

1.5 Git工作机制

  • 工作区

    代码存放磁盘的位置

  • 暂存区
    工作区的代码添加到暂存区,让Git追踪到

  • 本地库
    提交本地库
    生成历史版本

  • 远程库

    形成历史版本后,可以推送远程库

1.6 Git和代码托管中心

基于网络服务器的远程代码仓库,一般来说,简称远程库

  • 局域网

    公司自己搭建的服务器,上面部署的GitLab

  • 互联网

    • GitHub
    • Gitee

1.7 Head

Git HEAD是一个指针,它指向当前版本库中最新的提交。HEAD指的就是 .git/HEAD 文件,它存储着当前working directory所处的某次commit,打开文件内容为。
举个例子,假设你正在编写一本书,你可以将Git HEAD比喻为一个指针,它指向当前版本库中最新的提交,也就是你最近写的那一页。当你想要查看你最近写的内容时,你可以使用Git HEAD来查看最新的提交。

1.8 分支

分支是Git中一个重要的概念,它可以帮助开发者以不同的方式来进行开发,而不会影响主分支的开发。可以把分支比喻成一棵树,主分支就是树干,而其他分支就是树枝。每一个分支都有自己独立的开发空间,可以在自己的分支上进行开发,而不会影响到其他分支的开发。
例如,当一个项目需要添加一个新功能时,可以先在自己的分支上进行开发,确保新功能的完成后,再将其合并到主分支上。这样,就可以保证主分支的开发不受新功能的影响。

1.9 Git文件状态

在Git中,文件状态是指文件在版本控制系统中的状态。它可以是已暂存、已提交或已忽略的状态。本文将详细介绍Git中文件状态的三种状态:已暂存、已提交和已忽略。

已暂存:当文件被添加到暂存区时,它的状态就变成了“已暂存”。暂存区是一个临时存储区,用于存储文件的更改,以便在提交之前可以检查这些更改。

已提交:当文件从暂存区提交到本地仓库时,它的状态就变成了“已提交”。提交意味着文件的更改已经被永久保存到本地仓库中,并且可以被其他开发人员检索和使用。

已忽略:当文件被添加到.gitignore文件中时,它的状态就变成了“已忽略”。.gitignore文件用于指定Git忽略某些文件,这些文件不会被添加到暂存区,也不会被提交到本地仓库中。

1.10 版本

Git是一个分布式版本控制系统,它的核心思想是将文件的每一次修改都记录下来,以便以后查看。它把每一次修改都称为一个版本,每一次修改都会生成一个新的版本,并且每一个版本都有一个唯一的标识符,称为版本号。

Git可以让你轻松地回到以前的版本,从而让你轻松地比较不同版本之间的差异,以及恢复以前的版本。Git还可以让你在不同的分支上进行开发,从而让你可以在不同的分支上进行并行开发,从而更加有效地开发。

二、Git的安装

2.1 告知你Git是遵守GPL的

请添加图片描述

直接点击Next

  • GNU General Public License(GPL)是一种自由软件许可证,由自由软件基金会(Free Software Foundation)发布。它允许使用者自由地使用、复制、修改和分发许可证下的软件,但同时也要求使用者在发布修改后的软件时,也必须遵守GPL许可证的条款。GPL许可证的目的是保护软件的自由,防止软件被限制使用或修改。

2.2 选择要安装的组件

请添加图片描述

推荐不用创建桌面快键方式,不选检查更新。其他的,除了NEW的新特性(可勾不勾选)都要勾选。

  • .sh文件是一种脚本文件,它以.sh作为文件后缀,用于存储一系列的shell命令,可以被Unix或者Linux系统的shell解释器识别和执行。这些脚本文件可以用来自动化系统任务,比如定时执行某些程序,或者在系统启动时自动执行某些脚本。.sh文件也可以用来实现某些功能,比如设置环境变量,安装软件,编译代码等等。总之,.sh文件是一种强大的脚本文件,可以让你自动化系统任务,提高工作效率。
  • TrueType 字体是可缩放的数字字体,意思是它们可以调整到任何大小而不会失去质量。它们被广泛用于印刷和数字媒体,是Mac和Windows计算机最常用的字体格式。TrueType字体也是跨平台兼容的,意思是它们可以在Mac和Windows计算机上使用。
  • Scalar2.38新出的功能

2.3 选择一个默认的编辑器

在这里插入图片描述

选择Vim

Vim编辑器,尽管强大,但是很难去使用。它的接口不直观,键绑定也很尴尬。

  • 是windows默认编辑器因为一些历史原因,它被强烈建议去使用一些现代化的图形编辑器去取代它。
  • 这个选项会让 core.editor 选项未设置,会让Git回退到EDITOR环境变量。默认的编辑器是Vim,但是你可以设置成你悬着的其他编辑器。

2.4 是否要修改初始化分支的名字

在这里插入图片描述

历史原因可以直接选择让Git决定

  • 让Git决定
  • 重写新仓库的分支初始命名

2.5 是否要修改你的环境变量

在这里插入图片描述

推荐选第一个,第二个没人用

  • 只在Git Bash中使用Git:你的PATH不会被修改。你只能子啊Git Bash中使用Git命令行工具

  • 从命令行,也可以从第三方软件使用:(推荐)这个选项添加一些最小的Git包装器在你的PATH中去避免弄乱你的环境通过一些的可选的UNIX工具。你能在Git Bash、命令提示、windows PowerShell还有任何第三方软件中在PATH中找到Git

  • 使用Git和可选的Unix工具在命令提示中:Git和可选的Unix工具都会被添加到PATH。

    警告:这会重写windows工具的“find”和“sort”。只有在你理解这些影响的时候你才能选择这项。

2.6 选择SSH执行程序

在这里插入图片描述

  • 使用捆绑的:使用git自带的
  • 使用外部 OpenSSH

2.7 选择 HTTPS 传输后端

请添加图片描述

选第一个

  • 使用OpenSSL 库:服务器证书会被校验通过 ca-bhgundle.crt 文件
  • 使用windos安全渠道库:略

2.8 配置你行结尾的转换符

在这里插入图片描述

选第一条

  • 检出windows风格,提交Unix风格换行符:Git会转换LF为CRLF当通过文本文件查看时。当提交时,CRLF会被转换为LF,对于跨平台的项目,这被建议用在windows上(coer.autocrlf 会被设置为true
  • 检出按原样,提交Unix风格换行符:Git不会任何文本结尾换行符文本文件查看时。当提交时,CRLF会被转换为LF,对于跨平台的项目,这被建议用在Unix上(coer.autocrlf 会被设置为input
  • 检出按原样,提交按原样:不会做任何转换在检出和提交时。在跨平台项目上,这个选项不被建议使用。(coer.autocrlf 会被设置为false)

2.9 配置使用Git Bash时的终端

在这里插入图片描述

第一个

  • Use MinTTY(MSYS2默认的终端)
  • 使用windows的终端

2.10 选择一下git pull默认的行为

在这里插入图片描述

选第一个

  • 默认:
  • Rebase:待补充
  • Only ever fast-forward:

2.11 选择凭据管理器

在这里插入图片描述

第一个

  • Git凭据管理器:使用跨平台的凭据管理器
  • 没有:不使用凭据管理助手

2.12 其他配置

在这里插入图片描述

两个都勾选

  • 启用文件缓存机制:文件系统数据中的某些操作会被批量读取并缓存在内存中(core.fscache 被设置为true)。这提供了一个极大的性能提升。
  • 启用符号链接(软链接文件)

2.13 配置实验室功能

在这里插入图片描述

都不选

  • 启动对为控制台的支持:运行运行本地控制台如Node和Python,有bug
  • 启用内置的文件系统监控器:自动启动一个内置文件系统观察者,加快共有操作在包括很多文件的工作树中。

2.14 检查是否安装成功

git --version

在这里插入图片描述

三、Git 常用命令

3.1 Git的常见配置

在文件夹下右键,打开终端

在这里插入图片描述

3.1.1 修改配置

1. 配置提交人姓名:
git config --global user.name “提交人姓名”
 (对当前系统用户有效)
2. 配置提交人姓名:
git config --global user.email  “提交人邮箱” #
 (对当前系统用户有效)

签名的作用区分不同操作者的身份。用户的签名信息在每一个版本的提交信息都能看到,以此确定本次提交时谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码

用户签名与登录git的账号没有任何关系

哪里看设置成功?

xxx表示windows用户名,C:\Users\xxx下的.gitconfig文件

3.1.2 查看个人配置

  1. 打开终端,输入git config --list,查看当前的配置信息。
  2. 输入git config --global user.namegit config --global user.email,查看全局的用户名和邮箱。
  3. 输入git config --local user.namegit config --local user.email,查看本地的用户名和邮箱。

3.2 初始化本地库

  1. 在一个文件夹下,打开终端,输入git init,初始化本地库吗,会生成.git文件

    git init 命令是 Git 中最重要的命令之一,它用于初始化一个新的 Git 仓库。git init 命令可以帮助我们快速初始化一个 Git 仓库,从而开始版本控制。

    • 它会创建一个 .git 目录,用于存储与版本控制相关的所有信息。
    • 它还会创建一个初始化的 HEAD 文件,指向当前的分支。
    • 此外,它还会创建一个 config 文件,用于存储配置信息。
  2. 通过ll -a查看隐藏文件

    $ ll -a
    total 4
    drwxr-xr-x 1 Lenovo 197121 0 Feb 12 14:58 ./
    drwxr-xr-x 1 Lenovo 197121 0 Feb 12 14:58 ../
    drwxr-xr-x 1 Lenovo 197121 0 Feb 12 14:58 .git/
    

3.3 常用命令汇总

  1. git status它是一个 Git 中最常用的命令之一,用于检查当前仓库的状态。它可以显示本地仓库中被修改的文件,新增的文件,以及被跟踪的文件。此外,它还可以显示本地仓库和远程仓库之间的差异。git status 命令可以帮助我们更好地管理代码,并且可以让我们更容易地发现问题。
  2. Git的commit -m命令可以将改动提交到本地仓库,并且在提交时可以添加注释,以便更好地追踪变更。在使用commit -m命令时,需要在命令后面跟上一个注释,以描述本次提交的内容。
  3. add命令则可以将新文件或者修改过的文件添加到暂存区,准备提交到本地仓库。
  4. git reflog 是 Git 中一个强大的功能,它可以记录每一次提交的操作,以便在需要的时候恢复到之前的状态。它不仅可以记录提交,还可以记录撤销、拉取、推送等操作。git reflog 可以帮助我们恢复误删除的文件,也可以帮助我们恢复误操作的提交。它可以帮助我们恢复到任何想要的状态,而不用担心操作失误。
  5. git log 是 Git 中一个非常有用的命令,可以帮助我们查看提交历史。使用 git log 命令,可以查看每一次提交的详细信息,包括提交者的名字、提交的注释以及提交的日期等等。此外,git log 命令还可以查看提交之间的差异,以及查看某个文件的提交历史。使用 git log 命令,可以让我们更好地理解某个文件的演变历史,并且可以更加精准地定位到某个问题的源头。

3.4 实际案例

  1. 介绍一下 git reset --hard <version>:它可以把当前分支回滚到指定的版本号,并且会丢弃当前分支上所有未提交的更改。它可以用来撤销提交,也可以用来重置分支到某个指定的版本号。

  2. 提交本地库代码

    1. 首次查看

      $ git status
      On branch master
      No commits yet
      nothing to commit (create/copy files and use "git add" to track)
      
    2. 新增文件

      1. vim hello.txt,按i进入插入模式,输入hello git!
      2. 按ESC 再按V进入观察模式,把光标移到第一行,按yy,再按p复制10行。
      3. 按ESC,输入:wq保存结果并退出
    3. 再次查看本地库状态

      $ git status
      On branch master
      
      No commits yet
      
      Untracked files:
        (use "git add <file>..." to include in what will be committed)
              hello.txt
      
      nothing added to commit but untracked files present (use "git add" to track)
      

      存在违背追踪的文件,文件只在工作区,git没有追踪到文件。

  3. 添加文件到暂存区

    1. 执行git add “文件名”将文件添加到暂存区

      $ git add hegitllo.txt
      warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
      

      换行符由CRLF被替换为LF,在你的工作目录下有你的原始换行符。

    2. git status

      $ git status
      On branch master
      
      No commits yet
      
      Changes to be committed:
        (use "git rm --cached <file>..." to unstage)
              new file:   hello.tx
      

      git rm —cached 可以删除文件,暂存区的文件删掉

      $ git rm --cached hello.txt
      rm 'hello.txt'
      
      Lenovo@LAPTOP-G1QM4RHU MINGW64 /d/Aworkplace/Git-Space/gitDemo (master)
      $ git status
      On branch master
      
      No commits yet
      
      Untracked files:
        (use "git add <file>..." to include in what will be committed)
              hello.txt
      
      nothing added to commit but untracked files present (use "git add" to track)
      

      再次添加回来git add hello.txt

  4. 提交

    1. 提交本地库 git commit(形成自己的一个历史版本)

      $ git commit -m "first commit" hello.txt
      warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
      [master (root-commit) 586fabe] first commit
      1 file changed, 20 insertions(+)
      create mode 100644 hello.txt
      

      586fabe 表示版本号,1个文件被改变,20个插入

    2. git status

      $ git status
      On branch master
      nothing to commit, working tree clean
      

      没有东西需要提交,工作树是干净的

    3. git reflog 以及git log

      586fabe (HEAD -> master) HEAD@{0}: commit (initial): first commit
      
      Lenovo@LAPTOP-G1QM4RHU MINGW64 /d/Aworkplace/Git-Space/gitDemo (master)
      $ git log
      commit 586fabe126819aad3d463e6397c7437ccdc34295 (HEAD -> master)
      Author: consummate <sonsummate>
      Date:   Sun Feb 12 15:44:46 2023 +0800
      
          first commit
      

      586fabe126819aad3d463e6397c7437ccdc34295 完整版本号

      586fabe 前七位精准版本号

  5. 修改文件查看状态

    $ git status
    On branch master
    Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git restore <file>..." to discard changes in working directory)
    modified:   hello.txt
    

    modified: hello.txt 是红色表示没有被git追踪也就是没有到暂存区去

    执行一下命令

    1. git add hello.txt

    2. git status

      Lenovo@LAPTOP-G1QM4RHU MINGW64 /d/Aworkplace/Git-Space/gitDemo (master)
      $ git commit -m "second commit" hello.txt
      warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
      [master ffb4511] second commit
      1 file changed, 2 insertions(+), 2 deletions(-)
      Lenovo@LAPTOP-G1QM4RHU MINGW64 /d/Aworkplace/Git-Space/gitDemo (master)
      $ git status
      On branch master
      nothing to commit, working tree clean
      

      git没有修改的概念,更新就是一行新增,一行删除

  6. 版本穿梭

    $ git reset --hard 9818e75
    HEAD is now at 9818e75 asda
    

    打开.git目录目录底下有个HEAD文件,里面记录了分支

    ref: refs/heads/master
    

    .git\refs\heads目录下的master文件 里面存放了版本号

    9818e75b5d51cb201a8b6ea4e59ede2a1fe833ea
    

    切换版本,顶层其实是移动指针

    在这里插入图片描述

    在这里插入图片描述

四、 分支

4.1 什么是分支

Git的分支是一种用于管理多个版本的代码的方法,它可以让开发者们在不影响主分支的情况下,对代码进行安全的尝试和实验。每个任务都可以创建分支,分支意味着程序员开发自己分支的时候不会影响主分支的代码,让自己的开发工作和主线分离。

Git的分支可以分为主分支、特性分支、和热修复分支等。

使用Git分支时,首先需要创建分支,然后在分支上进行开发,最后将分支合并到主分支。创建分支的命令为git branch <branch name>,切换分支的命令为git checkout <branch name>,合并分支的命令为git merge <branch name>

在实际开发中,Git分支可以用来实现多人协作开发,每个人都可以在自己的分支上进行开发,最后将各自的分支合并到主分支上。Git分支还可以用来实现多版本的管理,比如可以在主分支上开发新版本,而旧版本的代码可以保留在另外的分支上。

在这里插入图片描述

好处:

  • 多个功能可以并行开发
  • 某个功能开发失败,不会影响其他分支

4.2 Git分支的语法

比较简单,主要有以下几个命令:

  • git branch:用于列出当前所有分支
    • -v
  • git checkout:用于切换分支
  • git merge:用于合并分支
  • git branch -d:用于删除分支
# 列出当前所有分支
git branch -v

# 创建新分支
git branch new_branch

# 切换到新分支
git checkout new_branch

# 合并分支
git merge master

# 删除分支
git branch -d new_branch

合并分支(无冲突的情况)

  1. git checkout new_branch

    .git下HEAD内容是

    ref: refs/heads/new

    .git\refs\heads 下也有了新文件 new 文件存了版本号

  2. 修改分支下的hello.txt文件,并提交

  3. 切换为master分支

    git checkout master

  4. 将new分支上的内容合并到master

    git merge new

  5. 合并成功

    $ git merge new
    Updating 9818e75..caef644
    Fast-forward
     hello.txt | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    

合并分支(冲突)

  1. 切换到new分支,在第二行后添加 new

  2. 切换到master分支同样修改第二行

  3. 合并new分支到master上

    $ git merge new
    Auto-merging hello.txt
    CONFLICT (content): Merge conflict in hello.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
    Lenovo@LAPTOP-G1QM4RHU MINGW64 /d/Aworkplace/Git-Space/gitDemo (master|MERGING)
    

    合并冲突在hello.txt,自动合并失败,修复冲突,然后提交结果。

  4. git status

    $ git status
    On branch master
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
            both modified:   hello.txt
    
  5. vim hello.txt

    hello gitttt
    hello gitttt
    <<<<<<< HEAD
    hello gitttt new master
    =======
    hello gitttt new new
    >>>>>>> new
    hello gitttt
    hello gitttt
    hello gitttt
    hello gitttt
    
    <<<<<<< HEAD
    
    当前分支的代码
    =======
    
    合并的分支的代码
    
    > > > > > > > new
    

    都做了修改,git不知道合并那个,人为合并,

    • 打开hello.txt文件,去掉特殊符号,对于冲突的部分保留你想要的,比如我两个都想要都保留,也可以只保留一个。
    hello gitttt
    hello gitttt
    hello gitttt new master
    hello gitttt new new
    hello gitttt
    hello gitttt
    hello gitttt
    hello gitttt
    
  6. git add hello.txt

  7. 提交本地库,但是不能带文件名 git
    git commit -m "xxxx"

五、团队协作机制

5.1 团队内协作(同一个远程库)

在这里插入图片描述

5.2 跨团队协作(不同远程库,多任务可以并行开发)

在这里插入图片描述

参考资料

第一章
尚硅谷Git入门到精通全套教程(涵盖GitHub\Gitee码云\GitLab)_哔哩哔哩_bilibili
学习路线

附录

Git快速下载地址:https://npm.taobao.org/mirrors
/git-for-windows/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值