十二笔记(三):Git的基本使用

一、什么是git、gitlab、github

git是一种版本控制系统,或者说是一种工具软件,用于对代码的存储和版本控制;
gitlab是一种远程代码仓库,或叫代码托管中心。它是基于git实现的,一般用于公司内部局域网环境下的团队开发代码管理和控制;
gitHub与gitlab的作用是一样的,只不过它是面向与互联网的代码仓库,目前也是全球最大的代码托管平台,任何人都可以注册账号来使用它,不过部分功能是收费的,比如说私有代码仓库,目前的收费标准是 7刀每月。
另外还有外网托管中心码云(gitee),免费的,对于项目的数量有要求的,目前是1000个,而且站点在国内,速度比github快。

二、git 的结构

工作区:写代码的地方
暂存区:打算要提交但是未提交,临时存储代码的地方
本地库:存储本地历史版本

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

三、代码托管中心(远程库)

团队内部协作,由于多人合作项目,需要将每个人的代码综合到一起,远程库就是存储合并所有开发人员的代码。

本地库 git push —>远程库
远程库 git clone -->本地库
远程库 git pull -->本地库

跨团队协作开发,多个远程库,先将远程库 A fork 到远程可以 B ,远程库B 代码写完后 pull request ,经过审核到 合并 (merge)到远程库A。

下面会有具体的操作案例。

四、git 的安装

  1. Git官网下载安装包

  2. 安装过程与常规软件安装一致,默认设置就好。
    在这里插入图片描述
    此处设置如何使用环境变量:

    选项说明
    use Git from Git Bsh only此选项不会修改系统的环境变量,但是只能在Git 命令行(Bash UI)下执行git命令。建议使用此选项
    Git from the command line and also from 3rd-party software此选项支持在window cmd 窗口执行git 命令
    Use Git an option Unix tools from the Command Prompt使用可选的Unix 工具,对系统环境变量有覆盖风险,不建议使用
  3. 安装成功后,在桌面右击,就可以看到git 的两个快捷工具,其中 git bash here 就是打开 git 命令行的在这里插入图片描述

五、git 命令行操作之基操

  1. 本地库初始化
    本地库初始化就是新建一个本地库。在我们需要进行版本控制的文件夹内,通过 git init 命令进行初始化。

    命令:git init
    效果:初始化完成后在文件目录中会生成一个 .git 文件夹
    在这里插入图片描述

  2. 设置签名
    设置签名的作用是为了区分不同开发人员的身份。签名需要用户名和email地址。但是这里设置签名的用户名和email与登录远程库(代码托管中心)的账号和密码没有任何关系。

    命令:git config
    效果:项目级别/仓库级别,仅在当前本地库范围内有效

    命令:git confg --global
    效果:系统用户级别,登录当前操作系统的用户范围内有效

    级别的优先级:就近原则,两者都有时项目级别优先于系统级别,两者都没有时不允许。

    在这里插入图片描述
    设置完签名后,设置的信息会保存在配置文件中。如果设置的是项目级,则在本地库 .git 下的 config 文件, 如果设置的是系统级,则在 用户目录下 .gitconfig 文件。

  3. 添加提交、查看状态
    状态查看:git status
    添加到暂存区:git add [文件名]
    提交到本地库:git commit -m “提交信息” [文件名]
    在这里插入图片描述

    • on branch master:当前在master分支
    • No commits yet:还没有任何提交到本地库
    • nothing to commit :暂存区没有可提交的
    • create/copy files and use “git add” to track:创建或复制文件 ,使用 git add 命令添加到追踪(版本管控)

    新建一个文件test.txt,然后再次执行 git status .在这里插入图片描述
    提示含义:有未被提交到暂存区的文件,使用 add 命令提交到暂存区,执行 git add 命令。

    在这里插入图片描述
    提示含义:暂存区有新建的文件,如果想撤回,使用 rm 命令(初始化后第一次提交暂存区后的撤销用rm,后续的撤销用 restore,具体看提示,我看到的是这样,不知道准不准)

    在这里插入图片描述
    将暂存区移除了文件,又回到了未追踪的状态。重新执行add 命令添加到暂存区。执行 commit 命令提交到本地库

    在这里插入图片描述
    提示含义:要求输入提交信息。一般我们记录本地提交的修改。此时进入的是 VMI 编辑模式。可以直接在该模式下添加提交信息,编辑好后 wq 退出。(linux 命令操作)

    在这里插入图片描述
    提交完再次执行 git status 查看,没有什么需要提交的,暂存区也是干净的。

    在这里插入图片描述
    现在我们对文件 test.txt 做修改,刚才是空文件,没有内容。在文件中写一些文字,再查看状态。
    在这里插入图片描述
    提示含义:存在没有暂存的修改,使用 add 命令更新提交到暂存区,或使用 restore 撤销修改。(可能有的版本是 checkout 代替 restore)。也可以直接使用 commit 提交到本地库。我们执行add 操作后再查看状态,表示又提交到了暂存区。
    在这里插入图片描述
    这次使用commit 命令时直接带上提交信息,不在vim编辑器操作
    在这里插入图片描述

    一个文件修改成功,增加一行。查看状态,回到无未提交文件状态。 在这里插入图片描述

    如果工作区有未提交的,git status 查看有红色提示,如果暂存区有未提交的,git status 查看有绿色提示

  4. 版本的前进和后退
    要对版本进行操作,首先要查看版本。查看版本用 git log 命令
    在这里插入图片描述
    可以看到有3次提交记录。
    commit e86ef496263813f6de280673821bbf2e765f6013 :提交版本哈希值
    (HEAD -> master):当前版本为master ,HEAD 是 版本指针,我们对版本的前进和后退的实质就是操作这个指针

    git log 可以加参数,以不同的方式显示历史版本,如 git log -oneline ,在一行显示版本号(缩写的哈希值)和提交信息
    git reflog ,在一行显示版本号(缩写的哈希值)、回退到版本的步数(HEAD@{1} 表示1步)、提交信息

    • 基于索引值的操作(推荐,可以前进也可以后退,根据版本/索引)
      命令:git reset --hard [索引/版本号]

      在这里插入图片描述

      提示 HEAD 已经在 e86ef49 edit test.txt 这个版本,我们来看一下文件内容,发现已经在 编辑 ASDFGHJK 之前的版本

      在这里插入图片描述

      或者再次查看版本历史,HEAD 指针在 e86ef49

      在这里插入图片描述

    • 使用异或符合 ^(只能前进不能后退)
      命令:git reset --hard HEAD^
      后退几步 就写几个 ^

      在这里插入图片描述

    • 使用 ~(只能前进不能后退)
      命令:git reset --hard HEAD~n
      后退几步 n 就是几
      在这里插入图片描述

    • reset 命令的三个参数:

      参数说明
      soft仅仅在本地库移动指针
      mixed在本地库和暂存区移动指针
      hard在本地库、暂存区和工作区移动指针
    • 对提交和撤销做一个操作总结

      • 步骤 1:确保工作区、暂存区、本地库 状态一致 在这里插入图片描述
      • 步骤2:修改工作区,提交到暂存区 在这里插入图片描述
      • 步骤3:此时我们可以执行 git restore --staged test.txt 命令,撤销对暂存区的提交,状态回到工作区修改状态 ,当然也可以执行 git commit 命令提交到本地库,后面操作。 我们执行 git restore --staged,对暂存区进行撤销。
        在这里插入图片描述
      • 步骤4:撤销暂存区的修改后,我们可以使用 git add 命令重新提交到暂存区(如步骤2),也可以使用 git restore 命令撤销对工作区的修改,我们执行 git restore,撤销对工作区的修改,此时工作区、暂存区状态都还原到修改前。
        在这里插入图片描述
      • 步骤5:重新修改文件,提交到暂存区在这里插入图片描述
      • 步骤6:这次我们不提交到本地库,也不撤销暂存区,直接对文件进行修改,然后查看状态,暂存区和工作区均有未提交的修改。暂存区修改的内容是第2行,工作区修改的内容是第三行在这里插入图片描述
      • 步骤7:我们可以对暂存区的文件进行撤销,撤销后第2行和第3行内容均回到工作区状态,执行 git restore --staged 命令
        在这里插入图片描述
      • 步骤8:我们可以使用 git add 命令 将第2行和第3行 修改重新提交到暂存区,也可以使用 git restore 命令撤销工作区的修改。此处演示 git restore ,执行之后,修改的文件第2行和第3行在工作区已移除
        在这里插入图片描述
      • 步骤9:回到步骤6后状态
        在这里插入图片描述
      • 步骤10:刚才操作的是将暂存区撤销,这次操作 git add ,将工作区的修改,即第3行,提交到暂存区,这时候第2行和第3行状态又保持到一致了。在这里插入图片描述
      • 步骤11 :提交到本地库,在本地库产生了版本号,并且前面的3次新增,1次删除都在此次提交有体现在这里插入图片描述
  5. 比较文件
    命令:git diff [文件名]
    效果:将工作区的文件和暂存区进行比较

    命令:git diff [本地库中的历史版本] [文件名]
    效果:将工作区的文件和本地库进行比较

    如果不加参数[文件名],则比较所有文件

    对文件作修改,不提交到暂存区,红色提示表示工作区有未提交的修改。 我们使用命令 diff 进行比较操作 在这里插入图片描述

六、git 命令行操作之分支管理

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

  2. 分支的好处

    • 同时并行推进多个功能开发,提高开发效率
    • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支废弃即可。
  3. master 分支是在git 初始化后默认的分支,其实前面我们在git status 命令下已经看到过
    在这里插入图片描述

  4. 查看分支
    命令:git branch -v
    在这里插入图片描述

  5. 创建分支
    命令:git branch [分支名]
    在这里插入图片描述
    创建分支是基于当前的分支来创建的,创建后的分支与当前分支内容和版本都是一样的。

  6. 切换分支
    命令:git checkout [分支名]
    在这里插入图片描述
    切换到刚才创建的分支 feature-1 ,发现源分支 master 中的文件 master-aaa.txt 也在分支feature-1中存在,验证了上述说明。

  7. 修改分支
    对分支 feature-1 进行修改,新增文件 feature1-aaa.txt 文件,提交到本地库。修改之后两个分支的版本号就不一样了。
    (在提交到本地库之前,新增或修改的文件对 其他分支也是可见的,提交之后只对所属分支可见)
    在这里插入图片描述

  8. 合并分支
    命令:git merge [分支名]

    • 合并分支之前,需要将被合并的分支切换为当前分支,如需要将 feature1 分支合并到master 分支,就要切换工作分支到master,合并之后feature1 分支中的文件 feature1-aaa.txt 就合并到 master 分支上了。
      在这里插入图片描述
  9. 分支冲突

    • 当多个分支对同一个文件的相同行进行修改操作,因为git 是以行为单位对文件进行追踪控制,此时如果将这多个分支进行合并,git 就不知道以哪一个分支的修改为主,就会产生冲突。我们将master分支和feature1 分支中的feature1-aaa.txt进行编辑,分别添加内容 master edit 和 feature1 edit ,并提交到本地库。 在这里插入图片描述

    • 合并feature1 到 master,提示文件 feature1-aaa.txt 自动合并失败,并且分支进入合并状态 在这里插入图片描述

    • 打开分支的 feature1-aaa.txt 文件 ,看文件内容,两个分支的修改都在一起,中间以 ======分隔开,此时需要我们手动处理。
      在这里插入图片描述

    • 解决冲突
      手动编辑文件到希望的状态。在实际的开发工作中,就需要冲突代码的双方程序员沟通。如本次修改为
      在这里插入图片描述

    • 修改完后查看状态,提示有未合并的目录
      在这里插入图片描述

    • 使用 git add 命令解决冲突,git commit 提交本地库。此时提交的 commit 不需要加文件名。 在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值