GIT 丨 GITHUB 基础笔记

1. Git基础

1.1 版本管理

1.1.1 什么是版本管理

版本管理是一种记录文件变化的方式,以便将来查阅特定版本的文件内容。

1.1.2 人为维护文档版本的问题
  1. 文档数量多且命名不清晰导致文档版本混乱
  2. 每次编辑文档需要复制,不方便
  3. 多人同时编辑同一个文档,容易产生覆盖

1.2 Git 是什么

Git是一个版本管理控制系统(缩写VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。

1.3 Git 安装

下载地址

在安装的过程中,所有选项使用默认值即可。

1.4 Git 基本工作流程

git仓库暂存区工作目录
用于存放提交记录临时存放被修改文件被Git管理的项目目录

1.5 Git 的使用

1.5.1 Git 使用前配置

在使用 git 前,需要告诉 git 你是谁,在向 git 仓库中提交时需要用到。

  1. 配置提交人姓名:git config --global user.name 提交人姓名
  2. 配置提交人姓名:git config --global user.email 提交人邮箱
  3. 查看git配置信息:git config --list
    在这里插入图片描述
    注意
  4. 如果要对配置信息进行修改,重复上述命令即可。
  5. 配置只需要执行一次。

我们除了可以在命令行中设置这些配置信息以外,还可以通过更改配置文件来更改配置信息。具体做法是打开C盘,找到用户,在用户目录下找到当前系统使用的用户目录。假设当前使用的用户是 YAOWEN ,点击该目录就会发现有一个.gitconfit文件,将 C:\Users\YAOWEN 目录下新产生的 .gitconfig 文件拖拽至 VScode编辑器中,可以看到内容如下:

[user]
	name = yaowen
	email = yaowen@qq.com

更改配置信息只需更改上述文件并保存即可。

1.5.2 提交步骤

在项目文件夹 GitDemo 下打开 git 命令行程序,在 git 命令行程序 中输入以下命令:

  1. git init 初始化git仓库
    在这里插入图片描述
    可以看到 GitDemo 文件夹下多了一个半透明的 .git 文件夹,该文件夹就是一个 git 仓库。
    在这里插入图片描述

  2. git status 查看文件状态
    在这里插入图片描述
    No commits yet 表示在当前仓库中还没有任何提交。Untracked files 表示没有被跟踪的文件,也就是没有被git管理的文件。下面的index.html显红就是一个没有被git管理的文件。

  3. git add 文件列表 追踪文件
    在这里插入图片描述
    此时index.html就被跟踪,提交到暂存区中去了。接下来就需要把暂存区中的文件提交到git仓库中去。

  4. git commit -m 提交信息 向仓库中提交代码
    在这里插入图片描述

  5. git log 查看提交记录
    commit 9b5b7370fbfce26be6c91cc9dba3c79a3ba9efe4 (HEAD -> master) 表示当前这次提交的提交ID,是当前这一次提交的唯一标识。

    Author: yaowen <yaowen@qq.com>Date: Sun Dec 20 20:58:55 2020 +0800 分别为提交作者和提交时间。第一次提交 为前面写的提交说明。
    在这里插入图片描述

1.5.3 撤销
(1)用暂存区中的文件覆盖工作目录中的文件: git checkout 文件

应用场景:当我们在开发项目中的某一个功能,在功能开发一半的时候,将工作目录中已修改的文件添加到了暂存区中,然后回到工作目录中继续开发。过了一会儿发现,后来开发的代码有些问题,需要将代码恢复到功能开发一半时的状态,这时就可以拿暂存区中的文件覆盖工作目录中的文件,这样工作目录中的文件就恢复到功能开发一般是的状态了。

注意:我们用暂存区中的文件覆盖了工作目录中的文件之后,暂存区中的文件不会消失,仍旧保存在暂存区中,依然被 git 所管理。

举例:前面我们将 index.html 提交到 git 缓存区 中之后,我们继续返回自己的项目文件夹中修改项目文件夹中的index.html文件,假设我们修改了许多之后发现有严重问题,这时我们想将 index.html 文件恢复到提交到git缓存区前的状态,也就是最近一次修改之前的状态,就需要用暂存区中的文件覆盖项目工作目录中的文件了。

例如提交到git缓存区前的状态:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>GIT</title>
  </head>
  <body>
    第一次正式使用GIT
  </body>
</html>

修改之后 index.html 的状态

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>GIT</title>
  </head>
  <body>
    第一次正式使用GIT
    我修改了文件
  </body>
</html>

这时我们想将 index.html 文件恢复到提交到 git缓存区 前的状态,使用以下命令
在这里插入图片描述
再查看项目工作目录中 index.html 文件,我们发现恢复到提交到 git缓存区 前的状态了。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>GIT</title>
  </head>
  <body>
    第一次正式使用GIT
  </body>
</html>

(2)将文件从暂存区中删除:git rm --cached 文件

应用场景:例如在工作目录中有一些测试文件,这些测试文件是不想让 git 管理的,因为它们只是一些临时文件,用完就删除了。我们有时候可能会不小心将这些测试文件添加到暂存区中,这时我们应该将它们从暂存区中删除。因为如果不进行删除,它们就会被后续的操作提交到 git仓库 当中。

注意:在命令执行完成之后,虽然这些被删除的文件在暂存区中没有了,也不被 git 所管理了,但是在工作目录中还是存在着这些文件。

举例:在GitDemo这个文件夹下新建一个test.html文件。现在我们假设我们不小心将这个文件添加到了暂存区中。
在这里插入图片描述
在这里插入图片描述
现在我们使用命令将缓存区中的test.html文件删除,之后再查看缓存区中该文件的状态,发现该文件回到了为跟踪列表中。注意我们的工作目录中还是存在该文件的,只不过该文件已经不被git所管理了。
在这里插入图片描述

(3)将 git仓库 中指定的更新记录恢复出来,并且覆盖暂存区和工作目录:git rest --hard commitID

举例:我们首先将list.html文件和test.html文件一起提交到git仓库中。完成提交后我们使用命令 git status 查看暂存区中的状态,返回结果nothing to commit, working tree clean 表明在工作目录中和暂存区中都没有要提交的文件,工作目录中是很干净的,说明了我们把这两个文件提交到了git仓库中了。
在这里插入图片描述
现在我们使用 git log 命令查看git仓库中有哪些提交历史记录。从下图看到,在仓库中一共有两次提交。
在这里插入图片描述
现在我想做的事情是将第一次提交恢复出来,用第一次提交的文件覆盖暂存区和工作目录中的文件。使用命令git rest --hard commitID ,具体操作如下:
在这里插入图片描述
上述操作之后,我们回到VScode编辑器中,发现GitDemo文件夹下只有index.html这个文件了,而这个index.html文件是我们当初第一次提交的文件。这就说明我们已经把第一次提交的文件恢复出来了。
在这里插入图片描述
接下来我们再使用 git log 查看提交的历史记录,发现在历史提交记录中只剩下第一次提交了。这是因为我们刚才把第一次提交恢复出来了,在第一次提交后面的所有提交都被 git 这个程序删除了。
在这里插入图片描述

2. Git进阶

2.1 分支

为了便于理解,大家暂时可以认为分支就是当前工作目录中代码的一份副本。

使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。

2.1.1 分支细分
  1. 主分支(master):第一次向 git 仓库中提交更新记录时自动产生的一个分支。

  2. 开发分支(develop):作为开发的分支,基于 master 分支创建。

  3. 功能分支(feature):作为开发具体功能的分支,基于开发分支创建

功能分支 -> 开发分支 -> 主分支

2.1.2 分支命令
  • 查看分支 git branch
    在这里插入图片描述

  • 创建分支 git branch 分支名称 。(当前我们在哪一个分支上进行的操作,就是基于哪一个分支创建分支,相当于哪一个分支创建副本)下面基于 master 分支创建 develop 分支。
    在这里插入图片描述

  • 切换分支 git checkout 分支名称。 (在切换分支之前,当前分支上的工作一定要提交到 git仓库 中,要保持当前分支上的工作区是完全干净的状态,否则就会出现问题。)
    在这里插入图片描述

    接下来我们演示在切换分支之前,当前分支上的工作没有提交到 git仓库 中,会出现什么样的问题。

    我们现在切换到编辑器当中,在GitDemo这个文件夹下,我们新建一个develop.html文件。注意,我们现在处在的分支是develop分支。接下来我们把develop.html添加到暂存区当中。
    在这里插入图片描述
    现在我们相当于在develop分支上做了修改,我们先不把这个修改进行提交,直接切换到master分支上,看会出现什么样的后果。
    在这里插入图片描述
    现在我们已经切换到master主分支上,观察GitDemo这个文件夹。我们发现develop.html这个文件竟然跑到了master分支上了。前面说过,分支与分支之间在开发的过程中是没有联系的,所以在develop分支上创建的develop.html文件不应该出现在其他分支上(这里指的是master主分支),但显然这个文件现在已经跑到了master分支上了,这就是有问题的。
    在这里插入图片描述
    现在我们切换回develop分支上,在develop分支上将develop.html文件提交到git仓库当中去。
    在这里插入图片描述
    现在我们已经把develop.html这个文件提交到了 git仓库 当中去了。接下来我们再切换回master主分支上,然后再来观察GitDemo这个文件夹,发现develop.html这个文件已经看不到了。因为我们现在所处的分支是master主分支上,而develop.html这个文件是在开发分支上创建的,所以在这我们是看不到的。
    在这里插入图片描述
    在这里插入图片描述
    接下来我们又切换回develop分支,看develop.html这个文件是否存在。

在这里插入图片描述
在这里插入图片描述
注意观察,我们看到现在develop.html这个文件就已经回来了。我们现在看到的状态才是正常状态。因为分支与分支在开发的过程中就是应该没有联系的,所以我们在开发分支上创建的文件在主分支上就不应该再被看到了,而应该在开发分支上再被看到。

  • 合并分支 git merge 来源分支。 (使用场景:如果在当前分支上的工作已经完成,就可以将当前分支合并到其他分支上去了,即合并当前分支上的工作成果。)

    举例:现在我们要将开发分支合并到主分支上。注意,由于是开发分支被合并到主分支上,所以我们要先切换到主分支上去,站在主分支的角度上合并开发分支。
    在这里插入图片描述
    切换到编辑器当中,我们看到我们现在确实是在主分支上,但是在主分支上我们也能看到develop.html这个文件。这是因为我们把开发分支上的文件合并到了主分支上,所以我们在主分支上才能看到develop.html这个文件。

    这里需要注意的是,虽然开发分支已经被合并到了主分支上,但是开发分支依然是存在的。合并完成后,我们还是可以切换回开发分支,在开发分支上继续进行开发。
    在这里插入图片描述
    我们看到开发分支上已经没有develop.html这个文件了。
    在这里插入图片描述

  • 删除分支 git branch -d 分支名称。(分支被合并后才允许删除)(-D 强制删除)如果某个分支上的工作已经完成,并且这个分支已经不需要继续存在了,这个时候我们就可以删除这个分支了。
    在这里插入图片描述
    需要注意的是,如果我们要删除的分支没有被合并,默认情况下这个分支是不允许被删除的。这个git程序对分支的保护机制,防止开发人员误删文件。如果这个分支是真的没有必要合并,就是不想要了,我们可以强制删除它。

    现在举例演示上述情况。我们来创建一个test分支,并切换到test分支上去,在test分支当中新建一个文件。
    在这里插入图片描述
    在这里插入图片描述
    接着我们把test.html文件添加到暂存区当中,并且提交到git仓库当中。
    在这里插入图片描述
    现在我们相当于在test分支上进行了编辑,并且把编辑的结果提交到了 git仓库 当中。接着我们再切换回master分支,然后再使用命令 git branch -d test 删除test分支。(注意,如果我们要在现在所处的test分支上删除test分支,这种做法是不被允许的。我们要必须先切换到其他分支上,然后才能对当前分支进行删除操作。)
    在这里插入图片描述
    从上图看到,在命令行工具当中已经给了我们提示 error: The branch 'test' is not fully merged. If you are sure you want to delete it, run 'git branch -D test'. 所以如果想要强制删除test分支,必须按照它的提示去做,如下图:
    在这里插入图片描述

2.2 暂时保存更改

前面提到,在切换分支之前,必须要将当前分支上所有的改动进行提交才能切换到其他分支上,否则就会出现问题。但在实际开发过程中,经常会遇到这样的情况。我正在开发一个新功能,这时老板跑过来告诉我,我之前开发的一个功能存在一个严重的bug,必须要立即修复,但是在当前分支上开发的新功能还没有开发完成,我不想提交然后切换到新的分支中修改bug。

遇到这种问题,我们就需要git提供的储藏功能了。我们可以将这个储藏功能想象成一个剪切板,它可以提取分支上所有的改动,并将改动保存起来,然后我们就得到一个干净的工作副本,也就是说一个不存在任何改动的工作目录,接下来我们就可以随意切换分支了。当我们将其他功能的bug修改完成以后,再切换回这个分支,此时我们可以将刚才储藏的改动再恢复回来,然后继续开发新功能。

在git中,可以暂时提取分支上所有的改动并存储,让开发人员得到一个干净的工作副本,临时转向其他工作。
使用场景:分支临时切换

  • 存储临时改动:git stash

  • 恢复改动:git stash pop。一旦将剪切板中的改动恢复出来,在剪切板中就不存在这些改动了。注意,git提供的这个储藏功能是独立于分支的,也就是说在其他分支上也可以执行这个命令。如果在其他分支上执行这个命令,就会将改动恢复到其他分支上。所以在执行命令之前,一定要搞清楚当前所在的分支是什么。

    现在我们演示命令的使用。切换到git命令行程序当中,目前我们只有一个分支,即主分支。我们创建一个develop分支,并切换到该develop分支上去。
    在这里插入图片描述
    接下来切换到VScode编辑器当中,在开发分支上新建一个dev.html文件。接着将dev.html文件添加到暂存区当中,之后查看当前工作区的状态。
    在这里插入图片描述
    在这里插入图片描述
    现在我们看到在develop这个分支并不是一个干净的工作区,这个时候我们是不能切换分支的。如果这个时候切换分支,dev.html这个文件就会被携带到新切换到的那个分支上去。之前提到,我们必须要将当前分支上的文件进行提交,才能切换分支。但有的时候我们就不想提交,因为这个工作还没有完成。这时我们就可以使用git stash这个命令先将改动剪切到git给我们提供的剪切板中。
    在这里插入图片描述
    这时候我们就可以切换到主分支上去了。

在这里插入图片描述
  切换到编辑器当中,我们看到在GitDemo这个文件夹下已经没有了dev.html这个文件了。 在这里插入图片描述
  假设我们在主分支上的工作已经完成了。我们切换回develop分支,使用git stash pop命令把剪切板当中的改动再恢复回来。

在这里插入图片描述
  切换到编辑器中当中,GitDemo文件夹下dev.html就回来了。

在这里插入图片描述

3. Github

在版本控制系统中,大约90%的操作都是在本地仓库中进行的:暂存,提交,查看状态或者历史记录等等。除此之外,如果仅仅只有你一个人在这个项目里工作,你永远没有机会需要设置一个远程仓库。

只有当你需要和你的开发团队共享数据时,设置一个远程仓库才有意义。你可以把它想象成一个 “文件管理服务器”,利用这个服务器可以与开发团队的其他成员进行数据交换。

3.1 注册

  1. 访问github首页,点击 Sign up 连接。(注册)

  2. 填写用户名、邮箱地址、GitHub登陆密码

  3. 选择计划

  4. 填写 GitHub 问题

  5. 验证邮箱

  6. GitHub 个人中心

3.2 多人协作开发流程

  • A在自己的计算机中创建本地仓库
  • A在github中创建远程仓库
  • A将本地仓库推送到远程仓库
  • B克隆远程仓库到本地进行开发
  • B将本地仓库中开发的内容推送到远程仓库
  • A将远程仓库中的最新内容拉去到本地
3.2.1 A在自己的计算机中创建本地仓库
3.2.2 A在github中创建远程仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.3 A将本地仓库推送到远程仓库
3.2.4 B克隆远程仓库到本地进行开发
3.2.5 B将本地仓库中开发的内容推送到远程仓库
3.2.6 A将远程仓库中的最新内容拉去到本地

3.3 创建仓库

  1. 填写仓库基本信息

  2. 将本地仓库推送到远程仓库

    1. git push 远程仓库地址 分支名称

    2. git push 远程仓库地址别名 分支名称

    3. git push -u 远程仓库地址别名 分支名称, -u 记住推送地址及分支,下次推送只需要输入git push即可

    4. 为远程仓库地址取别名 git remote add 远程仓库地址别名 远程仓库地址

3.4 拉取操作

3.4.1 克隆仓库

克隆远端数据仓库到本地:git clone 仓库地址

3.4.2 拉取远程仓库中最新的版本

拉取远程仓库中最新的版本:git pull 远程仓库地址 分支名称

3.5 解决冲突

在多人同时开发一个项目时,如果两个人修改了同一个文件的同一个地方,就会发生冲突。冲突需要人为解决。

3.6 跨团队协作

  1. 程序员 C fork仓库
  2. 程序员 C 将仓库克隆在本地进行修改
  3. 程序员 C 将仓库推送到远程
  4. 程序员 C 发起pull reqest
  5. 原仓库作者审核
  6. 原仓库作者合并代码

3.7 ssh免登陆

https协议仓库地址:https://github.com/itcast-frontEnd/git-demo.git

生成秘钥:ssh-keygen

秘钥存储目录:C:\Users\用户\.ssh

公钥名称:id_rsa.pub。公钥要存储在github账户当中。

私钥名称:id_rsa

3.8 GIT忽略清单

将不需要被git管理的文件名字添加到此文件中,在执行git命令的时候,git就会忽略这些文件。

git忽略清单文件名称:.gitignore

将工作目录中的文件全部添加到暂存区:git add .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值