- 00.GIT课程学习方法介绍
- 01. 版本控制系统概述
- 02.GIT介绍(掌握)
- 03.GIT下载与安装
- 04. 初次运行 Git 前的配置
- 05. Git仓库初始化
- 06.记录文件的更新到git仓库【重点】
- 07.GIT-文件差异分析
- 08.Git-撤销操作
- 09.Git-版本重置
- 10. Git远程仓库及码云仓库创建
- 11.码云远程仓库操作
- 12. 分支管理
- 13. 分支基本操作
- 14.IDEA项目Git初始化
- 15. IDEA的Git操作-add , commit
- 附录:如果看不到LocalChange
- 16. IDEA的Git操作:文件差异比较,更新撤销
- 17 IDEA的Git操作:版本重置
- 18 IDEA的Git操作:拉取远程仓库的项目
- 19 IDEA的Git操作:远程仓库代码获取及推送
- 20 IDEA的Git操作:分支的操作
- 21.GIT基本命令-总结
学习目标
1.能说出GIT的工作流程
2.使用GIT完成文件的版本管理操作
git菜鸟网站:https://www.runoob.com/git/git-tutorial.html
本笔记在线网址 》)
00.GIT课程学习方法介绍
- 务必好好学习本门课程,操作熟练度决定了你是不是一个专业的编程人员
- GIT学习时,主要侧重于操作
- GIT操作不可能一次性全部学完,后续还需要慢慢熟悉,提高熟练度
- 这门课程资料配图较多,如果你使用的Idea版本与老师不同,可能截图会对不上,所以看图的时候不要只看图,要看文字,万一界面不同,找对应的按钮即可
01. 版本控制系统概述
目标
- 能够说出什么是版本管理系统及其作用
内容
什么是“版本控制”?我为什么要关心它呢?
版本控制系统(简称:VCS) 是一种记录一个或若干文件内容变化,以便将来查阅特 定版本修订情况的系统。 对于我们程序员来说,主要就是针对程序代码文件作版本控制,但实际上,你 可以对任何类型的文件进行版本控制。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地 方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意 味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加 的工作量却微乎其微。
版本管理系统的种类 ?
- 集中化的版本控制系统 (Centralized Version Control Systems,简称 CVCS)。
这类系统,诸如 CVS、Subversion(简称SVN) 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端 连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
但这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时 内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无 疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制 系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
针对集中式版本控制系统的缺点,分布式版本控制系统面世了。
- 分布式版本控制系统(Distributed Version Control System,简称 DVCS)
在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像 下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
小结
- 什么是版本控制系统,作用是什么?
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特 定版本修订情况的系统。可以对任何文件进行版本管,可以实现信息追踪,可以实现版本回溯。
- 版本控制系统有什么分类,典型代表有哪些。
集中化的版本控制系统 (Centralized Version Control Systems,简称 CVCS)。 比如SVN
分布式版本控制系统(Distributed Version Control System,简称 DVCS)。比如Git
- GIT与SVN的区别【面试题,不用理解,概念性记忆】
- Git 是分布式的版本管理系统,SVN 是集中式版本管理系统。
- Git 把内容按元数据方式存储,而 SVN 是按文件
- Git 分支和 SVN 的0分支不同
- Git 没有一个全局的版本号,而 SVN 有
- Git 的内容完整性要优于 SVN
02.GIT介绍(掌握)
目标
能够说出git管理中文件的三种状态
能够说出git管理中文件存在的三个阶段
能够说出git工作的基本流程
内容
课外读物:Git 简史
同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的 繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区 免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
• 速度
• 简单的设计
• 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
• 完全分布式
• 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
现在请注意,如果你希望后面的学习更顺利,请记住下面这些关于 Git 的概念。
Git管理的文件有三种状态,你的文件可能 处于其中之一:
- 已修改(modified)
已修改表示修改了文件,但还没保存到数据库中。
- 已暂存(staged) 【缓存】
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交(committed)【将缓存永久保存】
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 管理项目文件时拥有三个阶段:工作区、暂存区以及 Git 仓库。
- 工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上 供你使用或修改。
- 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索 引”,不过一般说法还是叫“暂存区”。
- Git 仓库是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆 仓库时,复制的就是这里的数据。
基本的 Git 工作流程如下:
- 在工作区中修改文件。
- 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
- 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
如果 Git 目录(就是.git文件夹中,也叫做git仓库)中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状 态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。
小结
- Git 管理的文件有三种状态,分别是哪些状态?
已修改(modified),已暂存(staged),已提交(committed)
- Git管理项目文件存在三个阶段,分别是哪些?
工作区,暂存区,Git 仓库
git的工作流程
修改文件 —> 暂存 —>提交
03.GIT下载与安装
目标
内容
下载地址:https://git-scm.com/download
或者直接使用资料中安装文件:Git2.15.0-64-bit.exe
附件:Git-2.15.0-64-bit.exe.zip
安装过程非常简单,各种下一步,各种Next,点点点就完事了
双击直接安装【版本为64位系统的】
点击Next
点击Next
点击Next
点击Next
点击Next
后面步骤直接都是Next
点击Finish完成安装,验证安装,找一个桌面空白处,右键出现下列窗口
点击后,出现Git的控制台,在控制台输入git --version
,可以看到相关的帮助信息
04. 初次运行 Git 前的配置
目标
内容
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使 用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name "John Doe"
$ git config --global user.email "johndoe@example.com"
如果使用了 --global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事 情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运 行没有 --global
选项的命令来配置。
很多 GUI 工具都会在第一次运行时帮助你配置这些信息。
如果想要检查你的配置,可以使用 git config --list
命令来列出所有 Git 当时能找到的配置。
操作范例:
小结
安装完 Git 之后,要做的第一件事设置你的用户名和邮件地址。
05. Git仓库初始化
目标
能够将本地目录初始化为git仓库
内容
通常有两种获取 Git 项目仓库的方式:
- 将尚未进行版本控制的本地目录转换为 Git 仓库;
- 从其它服务器 克隆 一个已存在的 Git 仓库。
两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库,我们先学习第一种方式,第二种方式后面学习。
如果你有一个尚未进行版本控制的项目目录,想要用 Git 来控制它,那么首先让gitbush需要进入该项目目录中。之后执行:
$ git init
操作演示:
先合适的位置创建一个文件夹当做项目的仓库使用,打开这个文件夹,空白处右键选择 Git Bash Here,会调出一个命令行工具 Git Bash。 :::tips :::
在Git Bash 上输入
git init
进行初始化仓库。 :::tips
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的核心文件。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被Git管理并跟踪。
:::
小结
- 仓库初始化方式有两种:
将尚未进行版本控制的本地目录转换为 Git 仓库;
从其它服务器 克隆 一个已存在的 Git 仓库。
06.记录文件的更新到git仓库【重点】
目标
能够熟练使用git相关命令记录文件更新
内容
文件状态变化周期
文件状态及所对应阶段变化图
开发过程中,我们会在工作目录(工作区)创建新的文件,或者基于已有的文件进行修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交给仓库,仓库中会保存这文件此次提交的快照。
请记住,工作目录下的每一个文件只存在两种状态:已跟踪(tracked) 或 未跟踪(untracked)。
已跟踪的文件是指那些被纳入了版本控制的文件,在git仓库中有该文件的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区 。简而言之,已跟踪的文件就是 Git 已经知道的文件。
工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放 入暂存区,
例如:在MyGitProject 工作区目录中添加一个文件 readme.txt ,然后在Git Bash 中执行 git status
查看状态。
下面我们要完成readme.txt 文件的以下操作:跟踪新文件,暂存文件的更新,提交文件更新到git仓库
1 跟踪新文件
:::tips
操作步骤:
1、使用notepad++ 编辑工具,打开该文件写入一句话。
2、然后在git bash 里面执行命令:
- **添加readme.txt跟踪:**`git add readme.txt`
- **查看状态:**`git status`
:::
2 暂存修改
:::tips
至此,readme.txt 已经有一个暂存记录了。如果再进行修改该文件,则会生成一个新的修改记录。
操作步骤:
1、在文件中新增一句话
2、然后在git bash 里面执行查看状态命令:git status
我们该如何暂存当前已修改的文件呢?
继续执行 git add 命令,该命令即有添加跟踪功能,还有暂存修改的功能。如下:
操作步骤:
在git bash 里面执行命令:
- **暂存readme.txt文件的修改记录:**`git add readme.txt`
- **查看状态:**`git status`
:::
3 提交更新到git仓库
暂存成功后,查看状态。我们会看到提示 Changes to be committed ,这句话告诉我们该文件的版本更新已经暂存,将要被提交。我们可以使用 commit命令进行提交暂存到git仓库中。
git commit -m "<本次提交说明信息>"
说明:-m m是单词message的简写,可以用来记录此次提交备注。
备注可以说明,此次版本更新的信息,修改的bug,新增的功能等
例如,
1. 项目刚刚构建,初次加入版本库。
git commit -m "项目初始化!"
2. 修改了xxx bug
git commit -m "类名 100: 修改了****bug!"
:::tips
操作步骤:
在git bash 里面执行命令:
- 提交文件的暂存到git仓库:git commit readme.txt -m “项目初始化”
- 查看状态:git status
至此,我们就将一个文件的版本记录保存到Git仓库了。
:::
小结
git 项目管理中的文件存在哪些状态,分别对应什么阶段?
- 未跟踪,未修改,已修改状态,属于工作区阶段
- 已暂存 状态 属于暂存区阶段
- 已提交 属于git仓库阶段
跟踪新文件,暂存文件更新使用什么命令?
git add 命令,使用扩展:
- 提交暂使用什么命令?
git commit -m “<本次提交说明信息>”
如果忘记-m,操作如下:
- 查看当前状态什么命令?
git status
git add 文件
git commit -m “提交信息”
07.GIT-文件差异分析
目标
能够操作查看已暂存文件和未暂存文件的差异
能够操作查看已暂存文件和最后一次提交文件的差异
内容
git status 命令也可以判断文件是否有修改过,但提示比较简略。如果你想知道具体修改了什么地方,可以用 git diff 命 令。 稍后我们会详细介绍 git diff,你通常可能会用它来回答这两个问题:
1、当前做的哪些更新尚未暂存?
2、有哪些更新已暂存并准备好下次提交?
虽然 git status 列出文件名的方式回答了这个问题,但 git diff 能通过文件补丁的格式更加具体地显示哪些行发生了改变。
1 工作区和暂存区的比较(已暂存文件和未暂存的修改差异)
要查看所有尚未暂存的文件更新了哪些部分,不加参数直接输入git diff
,如下:
文件补丁说明:
diff --git a/readme.txt b/readme.txt # 表示对比的两个文件名
index 7ffad97..745d9a5 100644 #(了解)index后面两个数字表示两个文件的hash值,最后一个表示文件的属性,权限。
--- a/readme.txt # -- 表示修改前的文件(在这里是暂存区,修改前工作区和暂存区一样)
+++ b/readme.txt # ++ 表示修改后的文件(在这里是工作区)
# 对比范围,分为两个部分
# 第一部分是-1,2 -表示修改前文件,1,2表示第一行开始的两行内容,
# 第二部分是+1,3 +表示修改后文件,1,3表示第一行开始的三行内容。
@@ -1,2 +1,3 @@
#以下表示原文件内容
hello git!!!
-hello 111111
\ No newline at end of file #表示最后没有换行符号
#以下表示文件更新后的数据
+hello 111111
+hello 222222
\ No newline at end of file #表示最后没有换行符号
当我们将修改进行暂存后,再次进行对比差异时,就没有差异了,如下:
操作步骤:
- 暂存当前目录下所有文件的修改: git add .
- 比较未暂存文件和暂存文件的差异:git diff
2 暂存区和Git仓库的比较(已暂存文件和最后一次提交文件的修改差异)
指令:git diff --staged
( —staged 和 —cached 是同义词)
操作演示:
commit 提交更新后,再次比较内容就看不到差异了,如下:
操作命令:
1、git commit -m “文件差异化分析测试”
2、git diff
3、git diff —staged
3、工作区和Git仓库中最新版本比较git diff head
小结
1、当前做的哪些更新尚未暂存? git diff
2、有哪些更新已暂存并准备好下次提交?git diff --staged
3、工作区和Git仓库中最新版本比较git diff head
08.Git-撤销操作
目标
内容
在任何一个阶段,你都有可能想要撤消某些操作。比如在工作区修改了文件要撤销对文件修改,工作区的修改暂存到暂存区要撤销暂存。 注 意,有些撤消操作是不可逆的,有风险。
如何进行撤销,其实 git status
诉了 你应该如何做。
1)未暂存修改撤销
命令:git checkout -- fileName
例如,对readme.txt 进行内容修改,保存文件。此时在Git Bash 中执行 git status
看效果。
上面有提示我们如何进行撤销,现在我们撤销readme.txt的修改:
2)已暂存修改撤销
命令:git reset HEAD file
移除暂存区回到工作区
例如,对readme.txt 进行内容修改,保存文件,并暂存。此时在Git Bash 中执行 git status
看效果。
上面有提示我们如何进行撤销暂存,现在我们撤销readme.txt的暂存:
3)已提交撤销
可以将版本重置到上一个版本。具体操作键下节(09.Git-版本重置)内容。
小结
1)未暂存修改撤销git checkout -- fileName
2)已暂存修改撤销git reset HEAD file
移除暂存区回到工作区
09.Git-版本重置
目标
内容
当前知识点能够解决你在以后遇到的如下问题,
- 想要查看历史提交版本信息
- 出于某些原因,想要将代码回撤重置到指定版本
先对readme.txt文件进行模拟多次功能开发,多次功能提交,现在拥有多个版本信息。
下面要完成以下操作:
1 查看文件版本信息
git log
查看日志详细信息git log --pretty=oneline
查看日志简要信息
详细信息查看:
简短信息查看:
git reflog
显示所有版本操作日志,这里有所有历史版本记录。很重要
589562b (HEAD -> master) HEAD@{0}: commit: 功能升级3
表示当前引用的master分支的最新版本
2 版本重置
1)重置到上一个版本
命令: git reset --hard HEAD^
文件内容变化
查看版本
2)重置指定版本
命令:git reset --hard 版本编号
在输入版本编号时,可以不用版本号的全部,部分就行。
将版本回撤到 “文件差异分析测试”时的版本,并查看当前的简要版本信息,如下:
文件内容变化
3)重置到最后一次提交版本
如果之前的操作失误了,现在要回到最后一次提交的最新版本怎么办呢?使用git log
已经命令无法看到版本号了。此时我们可以使用git reflog
可以看到所有可以用版本记录,如下:
已经找到了我们最新版本的版本号了,可以使用 git reset --hard 版本编号
重置版本了
4)注意事项
版本重置时有风险的,假如你的工作区,和暂存区中还有内容,记得一定要做版本的提交。否则一旦执行上面的重置操作,工作区的内容和暂存区的内容都会清空。如果你此时开发了一天的代码,而没有做版本的提交,今天就白干了!
实验:
1、在readme.txt上进内容的新增,暂存(此时暂存区中有新内容)
2、再次在readme.txt上进行新增内容(此时工作区中有新新内容)
3、此时可以git diff
对比工作区和暂存区的差别,使用git diff --staged
对比暂存和git仓库
的差异。
4、git reset --hard head^
重置到上一个版本,查看文件内容(消失了💔)。重复步骤3.
小结
- 版本查看命令有哪些
git log
详细日志git log --pretty=oneline
简略日志git reflog
所有可使用版本记录
- 版本重置命令是什么
git reset --hard head^
重置到上一个版本git reset --hard 版本号
重置指定版本
- 版本重置时要注意工作区,暂存区数据的提交保存,有丢失风险。
10. Git远程仓库及码云仓库创建
目标
能够说出什么是远程仓库,能解决什么问题。
能够说出常见的git代码托管平台
内容
远程仓库是指托管在因特网或其他网络中 的你的项目的版本库。
远程仓库的学习,至少可以解决我们如下两个问题:
- 数据安全问题:到目前为止,我们一直操作的都是自己电脑本地的仓库文件,如果你开发了一个很重要的项目,为了避免硬盘坏掉,数据丢失,我们可以使用远程仓库进行备份。
- 多人协作问题:当到公司进行开发后,一个项目由多人开发协作开发。总不可能我这边写好代码U盘拷贝一份到你电脑,你写好代码U盘拷贝一份到我电脑(肯定要崩溃)。远程仓库可以实现多人协作问题。与他人协作时涉及管理远程仓库以及根据需要推送或拉取数据。 后续逐步学习
常用的远程仓库平台
- GitHub(https://github.com)
- gitee(https://gitee.com)
- gitlab(https://about.gitlab.com)
GitHub是一个面向开源及私有软件项目的托管平台。2018年微软以75亿美金收购了GitHub。
gitee和GitHub是一样的东西,是开源中国(OSChina)推出的基于Git的代码托管平台,又叫码云。
我们也可以使用gitlab自己搭建一个托管平台,工作后有很多公司会使用gitlab搭建公司内部自己的代码托管平台。这样可以让自己的代码更私密,更安全。
不管用那种代码托管平台,使用上大致一样。我们以gitee为例讲解。
gitee远程仓库搭建操作步骤
:::tips
步骤1:访问 gitee(https://gitee.com)网站,注册自己的账号(自己完成,记住账号邮箱和密码)。
步骤2:在gitee上创建一个仓库。
步骤3:填写仓库信息
步骤4:仓库创建完成,下个知识点我们将会讲解,仓库的关联等操作
:::
小结
什么是远程仓库?
远程仓库是指托管在因特网或其他网络中的你的项目的版本库。
远程仓库可以解决什么问题?
代码托管备份。
协同开发
常见代码托管平台?
github
gitee
gitlab
11.码云远程仓库操作
目标
内容
远程仓库创建后,我们讲解两种开始使用的情况,第一种情况是你本地已经有一个项目,需要把项目推送到远程仓库。第二种情况是你要将远程仓库的代码克隆下来进一步做开发(到公司后开发要做第一件事)。
我们先看第一种情况,已知我存在一个本地仓库,我需要将其推送到远程仓库中去。
1) 远程仓库的关联
关联远程仓库命令:git remote add <远程仓库别名> <远程仓库地址>
git remote add origin https://gitee.com/icmilyc/git-first-project.git
以上远程仓库别名叫做 origin。仓库地址如下方式获取。
操作范例:
:::tips
1)在本地创建一个文件夹当做本地仓库使用,使用Git Bush 打开,并git init
初始化。
2)添加远程仓库,并使用git remote -v 查看添加结果
命令:
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)第一次拉取
2) 检查文件目录
拉取成功!
:::
3) 远程仓库的推送
将本地仓库commit提交的内容,推送到远程仓库。
首次推送命令:git push -u origin master
后续推送命令:git push
操作范例:
:::tips
第一次推送的时候,输入码云用户名和密码
完成第一次的特别push操作后,后续本地库提交的内容都可以推送到远程库被大家共享使用。
特别注意,没有commit的内容(在工作区,暂存区)的内容将无法推送远程仓库。
:::
案例操作:写一个HelloWorld.java文件,将文件推送到远程仓库中。
:::tips
操作步骤:
1、创建文件,写代码
2、添加到暂存
3、提交到git仓库
4、推送到远程
:::
4) 远程仓库的克隆
将远程仓库直接下载一份到自己电脑,直接使用。可以完成自己权限内的各种操作。
克隆命令: git clone 远程仓库
:::tips
操作演示:将已有的远程仓库,clone一份到本地使用。
1、选择一个用来存放仓库的目录,右键选择
2、开始克隆
3、检查本地文件
:::
小结
#关联远程仓库命令:
git remote add <远程仓库别名> <远程仓库地址>
#注意:在推送代码前必须先拉取代码,否则无法推送本地仓库代码到码云仓库
首次拉取命令:git pull origin master --allow-unrelated-histories
后续拉取命令:git pull
#推送命令
首次推送命令:git push -u origin master
后续推送命令:git push
#克隆命令:
git clone <远程仓库>
1)想要将一个本地的仓库推送到新建的一个远程仓库中要怎么做?
首先关联远程仓库,然后拉取,再推送即可。
关联远程仓库:git remote add <远程仓库别名> <远程仓库地址>
首次拉取命令:git pull origin master --allow-unrelated-histories
首次推送命令:git push -u origin master
2)现有的远程仓库,怎么快速拿到本地开发使用?
克隆
git clone <远程仓库>
3)git clone(克隆) 与 git pull(拉取) 都是拉取仓库内容到本地有什么区别?
git clone(克隆) :是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程。
git pull(拉取) :在本地有版本库的情况下,从远程库获取最新commit 数据(如果有的话),并merge(合并)到本地。
推送数据到码云仓库时,若出现每次都需要输入码云用户名和密码情况,这样很麻烦,我们可以参考资料中的以下文件进行设置。
git扩展资料.pdf
12. 分支管理
目标
内容
1)分支介绍
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
几乎每一个仓库都有 master 分支,是因为git init
命令对仓库初始化的时候就默认创建它了,并且大多数人都懒得去改动它。
git所有分支之间彼此互不干扰,各自完成各自的工作和内容。可以在分支使用完后合并到总分支(原分支) 上,安全、便捷、不影响其他分支工作。
2)分支管理模式
根据项目的开发人数和发布版本的少,在项目中我们会用不同的分支管理模式,常见分支管理模式如下:
- 主干开发,主干发布。
- 分支开发,主干发布。
- 主干开发,分支发布。
- 分支开发,分支发布
设想两个不同的场景:
- 如果一个软件,只有一个开发者,只需要一个发布版本,那他需要什么样的分支模式?
- 如果一个软件,有 10 位开发者,需要支持多个版本,那他们又需要什么样的分支模式?
一个好的分支模式,可以大大提高软件的开发、集成和发布效率。选择什么样的分支策略,是每一个开发团队开始工作时面临的第一个问题。是一个高级的学问。我们刚开始学习分支不挖太深,先把基本的分支创建,合并,删除,冲突解决等操作进行学习,后面到项目实战时,你们会模拟公司多人开发项目场景,能真正感受的分支管理模式的高级操作。可以先阅读下这篇文章做了解。https://zhuanlan.zhihu.com/p/158463879
小结
使用分支我们可以把工作从开发主线上分离开来,以免影响开发主线。 实际开发中,使用合适的分支管理模式可以极大提高我们工作效率。
13. 分支基本操作
目标
内容
1)查看有哪些分支
命令:git branch
例如,查看当前仓库中所有分支
2)创建分支
命令:git branch <分支名>
例如,在当前分支中创建开发分支 dev1
3)切换分支
命令:git checkout <分支名>
例如,从当前分支切换分支到dev1分支。
4)创建并切换分支
命令:git checkout -b <分支名>
例如,从当前分支中创建分支dev2,并切换到分支dev2
5)删除分支
命令:git branch -d <被删分支名>
例如,删除分支dev2。
6)分支合并
所有分支上的相关操作都是的独立的,一个分支中所提交的版本,在其他分支中是查看不到的。如果当前分支想要拿到其他分支的版本,就要进行分支合并。
合并分支操作:
如果要把开发分支的内容合并到主线分支,那么要先切换到主线分支,然后再进行合并开发分支。这样开发分支的内容就会到主线分支。
命令:git merge <被分支分支>
例如,要将dev2分支合并到master分支中。
1、切换到master分支
2、在master分支上完成: git merge dev2
7)合并冲突解决
场景,工作中程序员Michoel和程序员Bob从开发分支中checkout出来后,开始开发。在开发分支中checkout出来时都有一个HelloWorld文件。这时他们都对HelloWorld进行开发,如下:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello michoel");
}
}
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello bob");
}
}
如果这两个程序员分支代码合并到一起,那么此时就冲突了。因为第三行代码不一样,你要么选择保留一方的代码,要么保留双方的代码,这就是解决冲突。
下面模拟下这个过程:
1)查看在master分支中HelloWorld.java文件内容:
2)创建并切换michoel开发分支,更改HelloWorld.java内容,然后提交版本到当前分支。
更新内容后提交
3)切换回master分支,然后创建并切换到Bob开发分支,更改HelloWorld.java内容,然后提交版本到当前分支。
更新内容后提交
4)回到master分支,合并michoel和bob分支内容,解决冲突。
查看冲突的文件
冲突解决
1、先把 <<<HEAD
和=====
>>>>
格式删除,把要保留的内容留下,不要的删除就行。
2、然后 add commit
(不要忘记了)
如下:
后面学习了idea,也可用idea来进行解决冲突。
小结
查看分支命令:git branch
创建分支命令:git branch <分支名称>
切换分支命令:git checkout <分支名称>
创建并切换分支:git checkout -b <分支名称>
删除分支命令:git branch -d <要删除的分支名称>
合并分支命令:git merge <要合并的分支名称>
合并冲突怎么解决:去除格式,把需要的代码留下就行。
14.IDEA项目Git初始化
目标
在IDEA中集成GIT,初始化工作区及设置忽略文件
内容
1)IDEA Git设置
:::tips
在idea中的file菜单中选中settings,弹出settings后在搜索中输入”git”,选择Git,指定你的安装的git.exe目录
校验git是否集成完成,点击test,弹出校验窗口,点击git Executed successed 成功则表示集成完成
:::
注意:如果IDEA提示git版本太低,(根据提示)重新装一个版本更高的git。
安装一个2.19.2以上的版本。
2)IDEA项目Git初始化
如果我们的项目还没有使用git,我们先要进行初始化。 步骤演示: 1 创建一个普通的java工程,或者选择一个以前没有Git关联的项目。 2 项目git初始化(类似于
**git init**
) 点击VCS ,然后点击Create Git Repository…
选择管理的文件夹,这里我现在的为gitProject文件夹项目根文件夹会生成一个
.git
目录,目录中会看文件呈现暗红色,表示未被git跟踪。idea中左下角也有专门的git窗口,可以看到所有git相关信息。
3)忽略文件类型添加
项目中有些和项目业务无关的文件比如.idea
,xxx.iml
等文件,或者一些编译的产物我们没有必要保存到版本库中,比如 maven项目中的target目录
,不要让git去跟踪,管理版本,此时需要对这些文件进行忽略配置,我们可以创建一个文件叫做 .gitignore
放到项目根目录,在这里配置需要忽略的文件。
可以拷贝”资料”中.gitignore
文件,到项目的根目录:
.gitignore.zip
### maven ###
target/
*.war
*.ear
*.zip
*.tar
*.tar.gz
### gradle ###
.gradle
!gradle/wrapper/gradle-wrapper.jar
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
*.lock
rebel.xml
### NetBeans ###
nbproject/private/
nbbuild/
dist/
nbdist/
.nb-gradle/
### logs ####
/logs/
*.log
### temp ignore ###
*.cache
*.diff
*.patch
*.tmp
*.java~
*.properties~
*.xml~
### system ignore ###
.DS_Store
Thumbs.db
Servers
.metadata
upload
gen_code
### node ###
node_modules
小结
1、idea 管理git.exe 软件
2、项目的git初始化
3、git忽略文件的添加
15. IDEA的Git操作-add , commit
目标
能够使用idea可视化操作 git 的add,commit 功能
内容
1)添加文件跟踪
或者我们新建文件时,会有弹框提示
添加追踪或文件有更新,在Git工具栏中是这样的
2)更新版本提交
在idea中,我们不用关心文件更新要先暂存,再提交。只要有更新,在Changelist 中就有记录显示。我们只要进行版本提交就行。
小结
1、文件要先添加到追踪
2、所有被git跟踪的文件,只要更新过,都会到ChangeList,我们提交时提交的是ChangeList中的文件
附录:如果看不到LocalChange
16. IDEA的Git操作:文件差异比较,更新撤销
目标
内容
我们学习命令的时候会对比工作区文件和暂存区文件的差异分析,暂存区和版本库中已提交的文件之间的差异。我们来到IDEA后,idea进行了简化,只关心未提交更新(包含已暂存,未暂存更新)和已提交文件的差异比较。
1)快速看和最近提交的不同
2)选择指定历史提交版本比较差异
完成第四步后,也会弹出比较窗口。
小结
IDEA查看文件差异,只关心未提交文件(包含已暂存,未暂存更新)和已提交文件的差异比较。
如果差异比较的过程中发现有需要撤销的可以在这时进行撤销。
17 IDEA的Git操作:版本重置
目标
内容
1) 重置指定版本
重置到最初版本
如果要重置版本到历史最后提交版本,而这时没有图形化显示,可以在命令行中完成(参考 09 Git-版本重置)
小结
版本重置有风险,小心操作。
18 IDEA的Git操作:拉取远程仓库的项目
目标
内容
1)通过版本控制系统创建项目
idea欢迎界面
或者,已打开项目界面
进入该界面:
然后按照提示下一步走就行了。
拉取成功后,会问你是否信任此项目,选择信任就行。
小结
19 IDEA的Git操作:远程仓库代码获取及推送
目标
内容
在idea操作界面右上角有如下几个按钮:
1)代码更新
把远程仓库的代码更新到本地,并合并。如果代码有冲突需要解决冲突。
2) 推送
把本地仓库中的代码推送到远程仓库。如果本地仓库该分支在远程仓库中没有会自动创建,直接push就行。也有快捷键:Ctrl+Shift+K
小结
本小结讲解了如和用idea从远程仓库中更新代码及推送代码到远程仓库
20 IDEA的Git操作:分支的操作
目标
内容
先熟悉界面界面
分支基本的操作,熟悉下面的界面操作。我们可以完成分支的创建,切换,删除,合并,推送到远程仓库等操作。
小结
21.GIT基本命令-总结
- 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的用户名和邮箱的设置
- 分支操作
- 创建分支
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操作 重点掌握
所有内容都是操作,参考讲义进行