1. 学习目标
  2. 1.能说出GIT的工作流程
  3. 2.使用GIT完成文件的版本管理操作
  4. git菜鸟网站:https://www.runoob.com/git/git-tutorial.html

本笔记在线网址 》)

00.GIT课程学习方法介绍

  • 务必好好学习本门课程,操作熟练度决定了你是不是一个专业的编程人员
  • GIT学习时,主要侧重于操作
  • GIT操作不可能一次性全部学完,后续还需要慢慢熟悉,提高熟练度
  • 这门课程资料配图较多,如果你使用的Idea版本与老师不同,可能截图会对不上,所以看图的时候不要只看图,要看文字,万一界面不同,找对应的按钮即可

01. 版本控制系统概述

目标

  • 能够说出什么是版本管理系统及其作用

    内容

    什么是“版本控制”?我为什么要关心它呢?
    版本控制系统(简称:VCS) 是一种记录一个或若干文件内容变化,以便将来查阅特 定版本修订情况的系统。 对于我们程序员来说,主要就是针对程序代码文件作版本控制,但实际上,你 可以对任何类型的文件进行版本控制。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地 方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意 味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加 的工作量却微乎其微。

版本管理系统的种类 ?

  1. 集中化的版本控制系统 (Centralized Version Control Systems,简称 CVCS)

这类系统,诸如 CVS、Subversion(简称SVN) 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端 连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
Git(版本管理系统) - 图1
但这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时 内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无 疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制 系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
针对集中式版本控制系统的缺点,分布式版本控制系统面世了。

  1. 分布式版本控制系统(Distributed Version Control System,简称 DVCS)

在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像 下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

Git(版本管理系统) - 图2

小结

  1. 什么是版本控制系统,作用是什么?

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特 定版本修订情况的系统。可以对任何文件进行版本管,可以实现信息追踪,可以实现版本回溯。

  1. 版本控制系统有什么分类,典型代表有哪些。

集中化的版本控制系统 (Centralized Version Control Systems,简称 CVCS)。 比如SVN
分布式版本控制系统(Distributed Version Control System,简称 DVCS)。比如Git

  1. GIT与SVN的区别【面试题,不用理解,概念性记忆】
    1. Git 是分布式的版本管理系统,SVN 是集中式版本管理系统。
    2. Git 把内容按元数据方式存储,而 SVN 是按文件
    3. Git 分支和 SVN 的0分支不同
    4. Git 没有一个全局的版本号,而 SVN 有
    5. Git 的内容完整性要优于 SVN

02.GIT介绍(掌握)

目标

能够说出git管理中文件的三种状态
能够说出git管理中文件存在的三个阶段
能够说出git工作的基本流程

内容

课外读物:Git 简史

  1. 同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
  2. Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的 繁琐事务上(19912002年间)。 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
  3. 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区 免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
  4. 速度
  5. 简单的设计
  6. 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  7. 完全分布式
  8. 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
  9. 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

现在请注意,如果你希望后面的学习更顺利,请记住下面这些关于 Git 的概念。
Git管理的文件有三种状态,你的文件可能 处于其中之一:

  1. 已修改(modified)

已修改表示修改了文件,但还没保存到数据库中。

  1. 已暂存(staged) 【缓存】

已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  1. 已提交(committed)【将缓存永久保存】

已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 管理项目文件时拥有三个阶段:工作区、暂存区以及 Git 仓库。

  1. 工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上 供你使用或修改。
  2. 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索 引”,不过一般说法还是叫“暂存区”。
  3. Git 仓库是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆 仓库时,复制的就是这里的数据。

Git(版本管理系统) - 图3

基本的 Git 工作流程如下:

  1. 在工作区中修改文件。
  2. 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
  3. 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。

如果 Git 目录(就是.git文件夹中,也叫做git仓库)中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状 态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。

小结

  1. Git 管理的文件有三种状态,分别是哪些状态?

已修改(modified),已暂存(staged),已提交(committed)

  1. Git管理项目文件存在三个阶段,分别是哪些?

工作区,暂存区,Git 仓库

  1. git的工作流程

    修改文件 —> 暂存 —>提交

03.GIT下载与安装

目标

GIT安装完成,并测试成功

内容

下载地址:https://git-scm.com/download
image.png

或者直接使用资料中安装文件:Git2.15.0-64-bit.exe
Git(版本管理系统) - 图5
附件:Git-2.15.0-64-bit.exe.zip

安装过程非常简单,各种下一步,各种Next,点点点就完事了
双击直接安装【版本为64位系统的】
Git(版本管理系统) - 图6
点击Next
Git(版本管理系统) - 图7
点击Next
Git(版本管理系统) - 图8
点击Next
Git(版本管理系统) - 图9
点击Next
Git(版本管理系统) - 图10
点击Next
Git(版本管理系统) - 图11
后面步骤直接都是Next
Git(版本管理系统) - 图12
点击Finish完成安装,验证安装,找一个桌面空白处,右键出现下列窗口
Git(版本管理系统) - 图13
点击后,出现Git的控制台,在控制台输入git --version,可以看到相关的帮助信息
image.png

04. 初次运行 Git 前的配置

目标

首次安装git后,能够配置git的用户名和邮件地址

内容

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使 用这些信息,它们会写入到你的每一次提交中,不可更改:

  1. $ git config --global user.name "John Doe"
  2. $ git config --global user.email "johndoe@example.com"

如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事 情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运 行没有 --global 选项的命令来配置。
很多 GUI 工具都会在第一次运行时帮助你配置这些信息。

如果想要检查你的配置,可以使用 git config --list命令来列出所有 Git 当时能找到的配置。
操作范例:
image.png

小结

安装完 Git 之后,要做的第一件事设置你的用户名和邮件地址。

05. Git仓库初始化

目标

  1. 能够将本地目录初始化为git仓库

内容

通常有两种获取 Git 项目仓库的方式:

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库;
  2. 从其它服务器 克隆 一个已存在的 Git 仓库。

两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库,我们先学习第一种方式,第二种方式后面学习。

如果你有一个尚未进行版本控制的项目目录,想要用 Git 来控制它,那么首先让gitbush需要进入该项目目录中。之后执行:

  1. $ git init

操作演示:

  1. 先合适的位置创建一个文件夹当做项目的仓库使用,打开这个文件夹,空白处右键选择 Git Bash Here,会调出一个命令行工具 Git Bash。 :::tips image.png :::

  2. 在Git Bash 上输入 git init进行初始化仓库。 :::tips image.png
    该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的核心文件。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被Git管理并跟踪。
    image.png :::

小结

  1. 仓库初始化方式有两种:

将尚未进行版本控制的本地目录转换为 Git 仓库;
从其它服务器 克隆 一个已存在的 Git 仓库。

  1. 本地目录转换为 Git 仓库的命令是 :git init

06.记录文件的更新到git仓库【重点】

目标

  1. 能够熟练使用git相关命令记录文件更新

内容

文件状态变化周期

文件状态及所对应阶段变化图
Git(版本管理系统) - 图19
开发过程中,我们会在工作目录(工作区)创建新的文件,或者基于已有的文件进行修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交给仓库,仓库中会保存这文件此次提交的快照。
image.png

请记住,工作目录下的每一个文件只存在两种状态:已跟踪(tracked) 或 未跟踪(untracked)
已跟踪的文件是指那些被纳入了版本控制的文件,在git仓库中有该文件的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区 。简而言之,已跟踪的文件就是 Git 已经知道的文件。
工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放 入暂存区,

例如:在MyGitProject 工作区目录中添加一个文件 readme.txt ,然后在Git Bash 中执行 git status查看状态。
image.png

下面我们要完成readme.txt 文件的以下操作:跟踪新文件,暂存文件的更新,提交文件更新到git仓库

1 跟踪新文件

:::tips 操作步骤:
1、使用notepad++ 编辑工具,打开该文件写入一句话。
2、然后在git bash 里面执行命令:

  1. - **添加readme.txt跟踪:**`git add readme.txt`
  2. - **查看状态:**`git status`

image.png :::

2 暂存修改

:::tips 至此,readme.txt 已经有一个暂存记录了。如果再进行修改该文件,则会生成一个新的修改记录。
操作步骤:
1、在文件中新增一句话
2、然后在git bash 里面执行查看状态命令:git status
image.png

我们该如何暂存当前已修改的文件呢?
继续执行 git add 命令,该命令即有添加跟踪功能,还有暂存修改的功能。如下:
操作步骤:
在git bash 里面执行命令:

  1. - **暂存readme.txt文件的修改记录:**`git add readme.txt`
  2. - **查看状态:**`git status`

image.png

:::

3 提交更新到git仓库

暂存成功后,查看状态。我们会看到提示 Changes to be committed ,这句话告诉我们该文件的版本更新已经暂存,将要被提交。我们可以使用 commit命令进行提交暂存到git仓库中。

  1. git commit -m "<本次提交说明信息>"
  2. 说明:-m m是单词message的简写,可以用来记录此次提交备注。
  3. 备注可以说明,此次版本更新的信息,修改的bug,新增的功能等
  4. 例如,
  5. 1. 项目刚刚构建,初次加入版本库。
  6. git commit -m "项目初始化!"
  7. 2. 修改了xxx bug
  8. git commit -m "类名 100: 修改了****bug!"

:::tips 操作步骤:
在git bash 里面执行命令:

  1. 提交文件的暂存到git仓库:git commit readme.txt -m “项目初始化”
  2. 查看状态:git status

image.png
至此,我们就将一个文件的版本记录保存到Git仓库了。 :::

小结

  1. git 项目管理中的文件存在哪些状态,分别对应什么阶段?

    • 未跟踪,未修改,已修改状态,属于工作区阶段
    • 已暂存 状态 属于暂存区阶段
    • 已提交 属于git仓库阶段
  2. 跟踪新文件,暂存文件更新使用什么命令?

git add 命令,使用扩展:
image.png

  1. 提交暂使用什么命令?

git commit -m “<本次提交说明信息>”
如果忘记-m,操作如下:
image.png

  1. 查看当前状态什么命令?

git status

git add 文件
git commit -m “提交信息”

07.GIT-文件差异分析

目标

能够操作查看已暂存文件和未暂存文件的差异
能够操作查看已暂存文件和最后一次提交文件的差异

内容

git status 命令也可以判断文件是否有修改过,但提示比较简略。如果你想知道具体修改了什么地方,可以用 git diff 命 令。 稍后我们会详细介绍 git diff,你通常可能会用它来回答这两个问题:
1、当前做的哪些更新尚未暂存?
2、有哪些更新已暂存并准备好下次提交?
虽然 git status 列出文件名的方式回答了这个问题,但 git diff 能通过文件补丁的格式更加具体地显示哪些行发生了改变。

1 工作区和暂存区的比较(已暂存文件和未暂存的修改差异)

Git(版本管理系统) - 图28
要查看所有尚未暂存的文件更新了哪些部分,不加参数直接输入git diff,如下:
image.png
文件补丁说明:

  1. diff --git a/readme.txt b/readme.txt # 表示对比的两个文件名
  2. index 7ffad97..745d9a5 100644 #(了解)index后面两个数字表示两个文件的hash值,最后一个表示文件的属性,权限。
  3. --- a/readme.txt # -- 表示修改前的文件(在这里是暂存区,修改前工作区和暂存区一样)
  4. +++ b/readme.txt # ++ 表示修改后的文件(在这里是工作区)
  5. # 对比范围,分为两个部分
  6. # 第一部分是-1,2 -表示修改前文件,1,2表示第一行开始的两行内容,
  7. # 第二部分是+1,3 +表示修改后文件,1,3表示第一行开始的三行内容。
  8. @@ -1,2 +1,3 @@
  9. #以下表示原文件内容
  10. hello git!!!
  11. -hello 111111
  12. \ No newline at end of file #表示最后没有换行符号
  13. #以下表示文件更新后的数据
  14. +hello 111111
  15. +hello 222222
  16. \ No newline at end of file #表示最后没有换行符号

当我们将修改进行暂存后,再次进行对比差异时,就没有差异了,如下:
操作步骤:

  1. 暂存当前目录下所有文件的修改: git add .
  2. 比较未暂存文件和暂存文件的差异:git diff

image.png

2 暂存区和Git仓库的比较(已暂存文件和最后一次提交文件的修改差异)

指令:git diff --staged( —staged 和 —cached 是同义词)

Git(版本管理系统) - 图31
操作演示:
image.png
commit 提交更新后,再次比较内容就看不到差异了,如下:
操作命令:
1、git commit -m “文件差异化分析测试”
2、git diff
3、git diff —staged
image.png

3、工作区和Git仓库中最新版本比较
git diff head

小结

1、当前做的哪些更新尚未暂存?
git diff
2、有哪些更新已暂存并准备好下次提交?
git diff --staged
3、工作区和Git仓库中最新版本比较
git diff head

08.Git-撤销操作

目标

能够操作查看仓库版本以及重置指定版本

内容

在任何一个阶段,你都有可能想要撤消某些操作。比如在工作区修改了文件要撤销对文件修改,工作区的修改暂存到暂存区要撤销暂存。 注 意,有些撤消操作是不可逆的,有风险。
如何进行撤销,其实 git status诉了 你应该如何做。
Git(版本管理系统) - 图34

1)未暂存修改撤销

命令:git checkout -- fileName

例如,对readme.txt 进行内容修改,保存文件。此时在Git Bash 中执行 git status看效果。
image.png
上面有提示我们如何进行撤销,现在我们撤销readme.txt的修改:
image.png

2)已暂存修改撤销

命令:git reset HEAD file 移除暂存区回到工作区

例如,对readme.txt 进行内容修改,保存文件,并暂存。此时在Git Bash 中执行 git status看效果。
image.png
上面有提示我们如何进行撤销暂存,现在我们撤销readme.txt的暂存:
image.png

3)已提交撤销

可以将版本重置到上一个版本。具体操作键下节(09.Git-版本重置)内容。

小结

1)未暂存修改撤销
git checkout -- fileName

2)已暂存修改撤销
git reset HEAD file 移除暂存区回到工作区

09.Git-版本重置

目标

能够操作查看仓库版本以及重置指定版本

内容

当前知识点能够解决你在以后遇到的如下问题,

  1. 想要查看历史提交版本信息
  2. 出于某些原因,想要将代码回撤重置到指定版本

先对readme.txt文件进行模拟多次功能开发,多次功能提交,现在拥有多个版本信息。
image.png
下面要完成以下操作:

1 查看文件版本信息

git log查看日志详细信息
git log --pretty=oneline查看日志简要信息

详细信息查看:
image.png
简短信息查看:
image.png

git reflog 显示所有版本操作日志,这里有所有历史版本记录。很重要
image.png

  1. 589562b (HEAD -> master) HEAD@{0}: commit: 功能升级3
  2. 表示当前引用的master分支的最新版本

2 版本重置

1)重置到上一个版本
命令: git reset --hard HEAD^
image.png
文件内容变化
Git(版本管理系统) - 图44
查看版本
image.png

2)重置指定版本
命令:git reset --hard 版本编号
在输入版本编号时,可以不用版本号的全部,部分就行。
将版本回撤到 “文件差异分析测试”时的版本,并查看当前的简要版本信息,如下:
image.png
文件内容变化
Git(版本管理系统) - 图47

3)重置到最后一次提交版本
如果之前的操作失误了,现在要回到最后一次提交的最新版本怎么办呢?使用git log已经命令无法看到版本号了。此时我们可以使用git reflog可以看到所有可以用版本记录,如下:
image.png
image.png

已经找到了我们最新版本的版本号了,可以使用 git reset --hard 版本编号 重置版本了
image.png

Git(版本管理系统) - 图51

4)注意事项
版本重置时有风险的,假如你的工作区,和暂存区中还有内容,记得一定要做版本的提交。否则一旦执行上面的重置操作,工作区的内容和暂存区的内容都会清空。如果你此时开发了一天的代码,而没有做版本的提交,今天就白干了!
实验:
1、在readme.txt上进内容的新增,暂存(此时暂存区中有新内容)
2、再次在readme.txt上进行新增内容(此时工作区中有新新内容)
3、此时可以git diff对比工作区和暂存区的差别,使用git diff --staged对比暂存和git仓库
的差异。
4、git reset --hard head^重置到上一个版本,查看文件内容(消失了💔)。重复步骤3.


小结

  1. 版本查看命令有哪些
    1. git log 详细日志
    2. git log --pretty=oneline 简略日志
    3. git reflog 所有可使用版本记录
  2. 版本重置命令是什么
    1. git reset --hard head^ 重置到上一个版本
    2. git reset --hard 版本号 重置指定版本
  3. 版本重置时要注意工作区,暂存区数据的提交保存,有丢失风险。

10. Git远程仓库及码云仓库创建

目标

能够说出什么是远程仓库,能解决什么问题。
能够说出常见的git代码托管平台

内容

远程仓库是指托管在因特网或其他网络中 的你的项目的版本库。

远程仓库的学习,至少可以解决我们如下两个问题:

  1. 数据安全问题:到目前为止,我们一直操作的都是自己电脑本地的仓库文件,如果你开发了一个很重要的项目,为了避免硬盘坏掉,数据丢失,我们可以使用远程仓库进行备份。
  2. 多人协作问题:当到公司进行开发后,一个项目由多人开发协作开发。总不可能我这边写好代码U盘拷贝一份到你电脑,你写好代码U盘拷贝一份到我电脑(肯定要崩溃)。远程仓库可以实现多人协作问题。与他人协作时涉及管理远程仓库以及根据需要推送或拉取数据。 后续逐步学习

Git(版本管理系统) - 图52

常用的远程仓库平台

GitHub是一个面向开源及私有软件项目的托管平台。2018年微软以75亿美金收购了GitHub。
gitee和GitHub是一样的东西,是开源中国(OSChina)推出的基于Git的代码托管平台,又叫码云。
我们也可以使用gitlab自己搭建一个托管平台,工作后有很多公司会使用gitlab搭建公司内部自己的代码托管平台。这样可以让自己的代码更私密,更安全。

不管用那种代码托管平台,使用上大致一样。我们以gitee为例讲解。

gitee远程仓库搭建操作步骤

:::tips 步骤1:访问 gitee(https://gitee.com)网站,注册自己的账号(自己完成,记住账号邮箱和密码)。
步骤2:在gitee上创建一个仓库。
image.png
步骤3:填写仓库信息
image.png
步骤4:仓库创建完成,下个知识点我们将会讲解,仓库的关联等操作
image.png :::

小结

什么是远程仓库?
远程仓库是指托管在因特网或其他网络中的你的项目的版本库。

远程仓库可以解决什么问题?
代码托管备份。
协同开发

常见代码托管平台?
github
gitee
gitlab

11.码云远程仓库操作

目标

能够参考资料完成关联拉取推送克隆(不用刻意记住命令)

内容

远程仓库创建后,我们讲解两种开始使用的情况,第一种情况是你本地已经有一个项目,需要把项目推送到远程仓库。第二种情况是你要将远程仓库的代码克隆下来进一步做开发(到公司后开发要做第一件事)。

我们先看第一种情况,已知我存在一个本地仓库,我需要将其推送到远程仓库中去。

1) 远程仓库的关联

关联远程仓库命令:git remote add <远程仓库别名> <远程仓库地址>

  1. git remote add origin https://gitee.com/icmilyc/git-first-project.git

以上远程仓库别名叫做 origin。仓库地址如下方式获取。
image.png

操作范例: :::tips 1)在本地创建一个文件夹当做本地仓库使用,使用Git Bush 打开,并git init初始化。
image.png
2)添加远程仓库,并使用git remote -v 查看添加结果
image.png

命令:
git init 初始化本地仓库
git remote add origin https://gitee.com/icmilyc/my-git-project.git 添加远程仓库
git remote -v 查看添加结果

:::

2) 远程仓库的拉取

从码云仓库拉取到本地仓库,远程仓库的文件信息会先拉取到本地。
注意:在推送代码前必须先拉取代码,否则无法推送本地仓库代码到码云仓库
首次拉取命令:git pull origin master --allow-unrelated-histories
首次拉取需要添加:—allow-unrelated-histories
后续拉取命令:git pull

操作范例: :::tips 1)第一次拉取
image.png
2) 检查文件目录
image.png
拉取成功! :::

3) 远程仓库的推送

将本地仓库commit提交的内容,推送到远程仓库。
首次推送命令:git push -u origin master
后续推送命令:git push

操作范例: :::tips image.png
第一次推送的时候,输入码云用户名和密码
image.png
完成第一次的特别push操作后,后续本地库提交的内容都可以推送到远程库被大家共享使用。
特别注意,没有commit的内容(在工作区,暂存区)的内容将无法推送远程仓库。 :::

案例操作:写一个HelloWorld.java文件,将文件推送到远程仓库中。 :::tips 操作步骤:
1、创建文件,写代码
2、添加到暂存
3、提交到git仓库
4、推送到远程
image.png :::

第二种情况,远程仓库的代码克隆下来进一步做开发

4) 远程仓库的克隆

将远程仓库直接下载一份到自己电脑,直接使用。可以完成自己权限内的各种操作。
克隆命令: git clone 远程仓库

:::tips 操作演示:将已有的远程仓库,clone一份到本地使用。
1、选择一个用来存放仓库的目录,右键选择
image.png
2、开始克隆
image.png
3、检查本地文件
image.png :::

小结

  1. #关联远程仓库命令:
  2. git remote add <远程仓库别名> <远程仓库地址>
  3. #注意:在推送代码前必须先拉取代码,否则无法推送本地仓库代码到码云仓库
  4. 首次拉取命令:git pull origin master --allow-unrelated-histories
  5. 后续拉取命令:git pull
  6. #推送命令
  7. 首次推送命令:git push -u origin master
  8. 后续推送命令:git push
  9. #克隆命令:
  10. git clone <远程仓库>

1)想要将一个本地的仓库推送到新建的一个远程仓库中要怎么做?
首先关联远程仓库,然后拉取,再推送即可。

  1. 关联远程仓库:git remote add <远程仓库别名> <远程仓库地址>
  2. 首次拉取命令:git pull origin master --allow-unrelated-histories
  3. 首次推送命令:git push -u origin master

2)现有的远程仓库,怎么快速拿到本地开发使用?
克隆
git clone <远程仓库>

3)git clone(克隆) 与 git pull(拉取) 都是拉取仓库内容到本地有什么区别?
git clone(克隆) :是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程。
git pull(拉取) :在本地有版本库的情况下,从远程库获取最新commit 数据(如果有的话),并merge(合并)到本地。

推送数据到码云仓库时,若出现每次都需要输入码云用户名和密码情况,这样很麻烦,我们可以参考资料中的以下文件进行设置。
git扩展资料.pdf
Git(版本管理系统) - 图70


12. 分支管理

目标

能够知道分支的作用

内容

1)分支介绍
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

Git(版本管理系统) - 图71

几乎每一个仓库都有 master 分支,是因为git init 命令对仓库初始化的时候就默认创建它了,并且大多数人都懒得去改动它。
git所有分支之间彼此互不干扰,各自完成各自的工作和内容。可以在分支使用完后合并到总分支(原分支) 上,安全、便捷、不影响其他分支工作。

2)分支管理模式
根据项目的开发人数和发布版本的少,在项目中我们会用不同的分支管理模式,常见分支管理模式如下:

  • 主干开发,主干发布。
  • 分支开发,主干发布。
  • 主干开发,分支发布。
  • 分支开发,分支发布

设想两个不同的场景:

  • 如果一个软件,只有一个开发者,只需要一个发布版本,那他需要什么样的分支模式?
  • 如果一个软件,有 10 位开发者,需要支持多个版本,那他们又需要什么样的分支模式?


一个好的分支模式,可以大大提高软件的开发、集成和发布效率。选择什么样的分支策略,是每一个开发团队开始工作时面临的第一个问题。是一个高级的学问。我们刚开始学习分支不挖太深,先把基本的分支创建,合并,删除,冲突解决等操作进行学习,后面到项目实战时,你们会模拟公司多人开发项目场景,能真正感受的分支管理模式的高级操作。可以先阅读下这篇文章做了解。https://zhuanlan.zhihu.com/p/158463879

小结

使用分支我们可以把工作从开发主线上分离开来,以免影响开发主线。 实际开发中,使用合适的分支管理模式可以极大提高我们工作效率。

13. 分支基本操作

目标

能够完成分支基本的查看,创建,切换,合并操作

内容

1)查看有哪些分支

命令:git branch
例如,查看当前仓库中所有分支
image.png

2)创建分支

命令:git branch <分支名>
例如,在当前分支中创建开发分支 dev1
image.png

3)切换分支

命令:git checkout <分支名>
例如,从当前分支切换分支到dev1分支。
image.png

4)创建并切换分支

命令:git checkout -b <分支名>
例如,从当前分支中创建分支dev2,并切换到分支dev2
image.png

5)删除分支

命令:git branch -d <被删分支名>
例如,删除分支dev2。
image.png

6)分支合并

所有分支上的相关操作都是的独立的,一个分支中所提交的版本,在其他分支中是查看不到的。如果当前分支想要拿到其他分支的版本,就要进行分支合并。
Git(版本管理系统) - 图77
合并分支操作:
如果要把开发分支的内容合并到主线分支,那么要先切换到主线分支,然后再进行合并开发分支。这样开发分支的内容就会到主线分支。

命令:git merge <被分支分支>
例如,要将dev2分支合并到master分支中。
1、切换到master分支
2、在master分支上完成: git merge dev2

7)合并冲突解决

场景,工作中程序员Michoel和程序员Bob从开发分支中checkout出来后,开始开发。在开发分支中checkout出来时都有一个HelloWorld文件。这时他们都对HelloWorld进行开发,如下:

  1. public class HelloWorld{
  2. public static void main(String[] args){
  3. System.out.println("Hello michoel");
  4. }
  5. }
  1. public class HelloWorld{
  2. public static void main(String[] args){
  3. System.out.println("Hello bob");
  4. }
  5. }

如果这两个程序员分支代码合并到一起,那么此时就冲突了。因为第三行代码不一样,你要么选择保留一方的代码,要么保留双方的代码,这就是解决冲突。

下面模拟下这个过程:
1)查看在master分支中HelloWorld.java文件内容:
image.png

2)创建并切换michoel开发分支,更改HelloWorld.java内容,然后提交版本到当前分支。
image.png
更新内容后提交
image.png
image.png

3)切换回master分支,然后创建并切换到Bob开发分支,更改HelloWorld.java内容,然后提交版本到当前分支。
image.png
更新内容后提交
image.png
image.png
4)回到master分支,合并michoel和bob分支内容,解决冲突。
image.png
查看冲突的文件
image.png
冲突解决
1、先把 <<<HEAD===== >>>> 格式删除,把要保留的内容留下,不要的删除就行。
2、然后 add commit (不要忘记了)
如下:
Git(版本管理系统) - 图87
image.png

后面学习了idea,也可用idea来进行解决冲突。

小结

查看分支命令:git branch
创建分支命令:git branch <分支名称>
切换分支命令:git checkout <分支名称>
创建并切换分支:git checkout -b <分支名称>
删除分支命令:git branch -d <要删除的分支名称>
合并分支命令:git merge <要合并的分支名称>
合并冲突怎么解决:去除格式,把需要的代码留下就行。

14.IDEA项目Git初始化

目标

  1. IDEA中集成GIT,初始化工作区及设置忽略文件

内容

1)IDEA Git设置

:::tips 在idea中的file菜单中选中settings,弹出settings后在搜索中输入”git”,选择Git,指定你的安装的git.exe目录
Git(版本管理系统) - 图89
校验git是否集成完成,点击test,弹出校验窗口,点击git Executed successed 成功则表示集成完成
Git(版本管理系统) - 图90 :::

注意:如果IDEA提示git版本太低,(根据提示)重新装一个版本更高的git。
18542958-afd0-40a8-b5bb-1642e9e65e9e.png
安装一个2.19.2以上的版本。

2)IDEA项目Git初始化

如果我们的项目还没有使用git,我们先要进行初始化。 步骤演示: 1 创建一个普通的java工程,或者选择一个以前没有Git关联的项目。 image.png 2 项目git初始化(类似于 **git init** 点击VCS ,然后点击Create Git Repository…
image.png
选择管理的文件夹,这里我现在的为gitProject文件夹
image.png

项目根文件夹会生成一个.git 目录,目录中会看文件呈现暗红色,表示未被git跟踪。 image.pngimage.png

idea中左下角也有专门的git窗口,可以看到所有git相关信息。 image.png

3)忽略文件类型添加

项目中有些和项目业务无关的文件比如.idea,xxx.iml等文件,或者一些编译的产物我们没有必要保存到版本库中,比如 maven项目中的target目录,不要让git去跟踪,管理版本,此时需要对这些文件进行忽略配置,我们可以创建一个文件叫做 .gitignore放到项目根目录,在这里配置需要忽略的文件。

可以拷贝”资料”中.gitignore文件,到项目的根目录:
.gitignore.zip

  1. ### maven ###
  2. target/
  3. *.war
  4. *.ear
  5. *.zip
  6. *.tar
  7. *.tar.gz
  8. ### gradle ###
  9. .gradle
  10. !gradle/wrapper/gradle-wrapper.jar
  11. ### IntelliJ IDEA ###
  12. .idea
  13. *.iws
  14. *.iml
  15. *.ipr
  16. *.lock
  17. rebel.xml
  18. ### NetBeans ###
  19. nbproject/private/
  20. nbbuild/
  21. dist/
  22. nbdist/
  23. .nb-gradle/
  24. ### logs ####
  25. /logs/
  26. *.log
  27. ### temp ignore ###
  28. *.cache
  29. *.diff
  30. *.patch
  31. *.tmp
  32. *.java~
  33. *.properties~
  34. *.xml~
  35. ### system ignore ###
  36. .DS_Store
  37. Thumbs.db
  38. Servers
  39. .metadata
  40. upload
  41. gen_code
  42. ### node ###
  43. node_modules

添加前后对比:
image.pngimage.png

小结

1、idea 管理git.exe 软件
2、项目的git初始化
3、git忽略文件的添加

15. IDEA的Git操作-add , commit

目标

能够使用idea可视化操作 git 的add,commit 功能

内容

1)添加文件跟踪

image.png

或者我们新建文件时,会有弹框提示
image.png

添加追踪或文件有更新,在Git工具栏中是这样的
image.png

2)更新版本提交

在idea中,我们不用关心文件更新要先暂存,再提交。只要有更新,在Changelist 中就有记录显示。我们只要进行版本提交就行。
image.png

小结

1、文件要先添加到追踪
2、所有被git跟踪的文件,只要更新过,都会到ChangeList,我们提交时提交的是ChangeList中的文件

附录:如果看不到LocalChange

image.png

16. IDEA的Git操作:文件差异比较,更新撤销

目标

能够使用IDEA查看文件差异

内容

我们学习命令的时候会对比工作区文件和暂存区文件的差异分析,暂存区和版本库中已提交的文件之间的差异。我们来到IDEA后,idea进行了简化,只关心未提交更新(包含已暂存,未暂存更新)已提交文件的差异比较

1)快速看和最近提交的不同

image.png

2)选择指定历史提交版本比较差异

image.png
完成第四步后,也会弹出比较窗口。

小结

IDEA查看文件差异,只关心未提交文件(包含已暂存,未暂存更新)已提交文件的差异比较。
如果差异比较的过程中发现有需要撤销的可以在这时进行撤销。

17 IDEA的Git操作:版本重置

目标

能够完成idea的可视化界面操作版本重置

内容

为了测试方便,可以自己先提交若干个版本。

1) 重置指定版本

image.png
重置到最初版本
image.png

如果要重置版本到历史最后提交版本,而这时没有图形化显示,可以在命令行中完成(参考 09 Git-版本重置)
image.png

小结

版本重置有风险,小心操作。

18 IDEA的Git操作:拉取远程仓库的项目

目标

能够使用idea拉取远程仓库项目

内容

不管你的远程仓库托管在那个平台,都要先获取仓库地址。

1)通过版本控制系统创建项目

idea欢迎界面
image.png
或者,已打开项目界面
image.png

进入该界面:
image.png

然后按照提示下一步走就行了。
拉取成功后,会问你是否信任此项目,选择信任就行。

小结

idea 获取远程项目

19 IDEA的Git操作:远程仓库代码获取及推送

目标

能够操使用idea操作git分支

内容

在idea操作界面右上角有如下几个按钮:
image.png

1)代码更新

把远程仓库的代码更新到本地,并合并。如果代码有冲突需要解决冲突。
image.png

2) 推送

把本地仓库中的代码推送到远程仓库。如果本地仓库该分支在远程仓库中没有会自动创建,直接push就行。也有快捷键:Ctrl+Shift+K
image.png

小结

本小结讲解了如和用idea从远程仓库中更新代码及推送代码到远程仓库

20 IDEA的Git操作:分支的操作

目标

熟练使用idea操作分支操作

内容

先熟悉界面界面
image.png

分支基本的操作,熟悉下面的界面操作。我们可以完成分支的创建,切换,删除,合并,推送到远程仓库等操作。
image.png

小结

分支操作要熟练操作

21.GIT基本命令-总结

Git(版本管理系统) - 图118

  • GIT概念
    • 工作区 就是你在电脑里能看到的目录
    • 暂存区 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
    • 版本库 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库
    • 远程仓库 常用的远程仓库有 gitee github gitlab
  • 本地操作
    • 初次运行git的用户名和邮箱的设置
      • 用户名设置:git config --global user.name "John Doe"
      • 邮箱的设置: git config --global user.email "johndoe@example.com"
      • 初始化工作区 git init
      • 查看状态 git status
    • add与commit
      • git add 文件名称 作用 工作区提交暂存区
      • git commit -m 文件名称 作用 暂存区提交本地仓库
      • git status作用 查看文件状态
    • 差异比较
      • git diff 文件名 作用 工作区与暂存区比较
      • git diff head 文件名 作用 工作区与本地库比较
      • git diff --cached 文件名 作用 暂存区与本地库比较
    • 版本回退
      • git log 作用 查看当前操作日志
      • git reflog作用 查看所有操作日志
      • git reset --hard head^ 作用 回退上一个版本
      • git reset --hard 版本号作用 回退到指定版本
    • 修改撤消
      • git checkout 文件名 工作区撤消
      • git reset head 文件名 暂存区撤消
  • 分支操作
    • 创建分支 git branch 分支名称
    • 切换分支 git checkout 分支名称
    • 合并分支 git meger 分支名称
    • 查看分支 git branch
    • 删除分支 git branch -d 分支名称
  • 远程仓库

    • 关联 git remote add origin 远仓库
    • 首次拉取命令:git pull origin master --allow-unrelated-histories
    • 拉取 git pull
    • 首次推送git push -u origin master
    • 推送 **git push**
    • 克隆 **git clone **远程仓库克隆
  • IDEA集成GIT操作 重点掌握
    所有内容都是操作,参考讲义进行