🔥博客主页: 【小扳_-CSDN博客】**
❤感谢大家点赞👍收藏⭐评论✍**
文章目录
[1.0 Git 概述](#1.0 Git 概述)
[2.0 Git 的安装和配置](#2.0 Git 的安装和配置)
[3.0 获取本地仓库](#3.0 获取本地仓库)
[3.1 基础操作指令](#3.1 基础操作指令)
[3.2 分支](#3.2 分支)
[4.0 Git 远程仓库](#4.0 Git 远程仓库)
[4.1 创建远程仓库](#4.1 创建远程仓库)
[4.2 配置 SSH 公钥](#4.2 配置 SSH 公钥)
[4.3 操作远程仓库](#4.3 操作远程仓库)
[5.0 使用 IEAD 中使用 Git](#5.0 使用 IEAD 中使用 Git)
[5.1 在 IDEA 中配置 Git](#5.1 在 IDEA 中配置 Git)
[5.2 在 IDEA 中操作 Git](#5.2 在 IDEA 中操作 Git)
1.0 Git 概述
Git 是一种分布式版本控制系统,用于跟踪文件的修改以及协作开发中的源代码管理。它由 Linus Torvalds 于 2005 年创建,主要用于支持 Linux 内核的开发。以下是 Git 的一些关键概述:
1)分布式架构:每个开发者的工作站都可以完整地克隆整个版本库,拥有所有文件和版本历史。这使得 Git 的操作更加高效,即使在没有网络的情况下也能进行大多数操作。
2)版本控制:Git 能够记录文件的所有修改历史,这样开发者可以轻松地回滚到先前的版本,比较不同版本间的差异,以及恢复误删的内容。
3)速递(Snapshot):Git 采用"快照"的概念管理文件,而不是简单的差异记录。每当你提交变化(commit)时,Git 会记录文件的当前状态,形成一个新的快照。
4)分支与合并:Git 允许创建多个分支(branches),使得开发人员可以独立于主线进行功能开发和实验。分支的合并(merge)也相对简单,并且可以处理重复修改的情况。
5)高效性:Git 的设计目标使其在处理大文件和历史记录时效率极高,操作大多数都是本地进行,快速响应。
6)开放源代码:Git 是开源的,这意味着任何人都可以使用、修改和分发其源代码,促进了广泛的社区支持和插件开发。
7)工作流程:Git 提供了许多工作流程,如集中式工作流、功能分支工作流、GitFlow等,适合不同规模和类型的项目。
8)平台支持:Git 支持多个操作系统,包括 Linux、Windows 和 macOS,且与许多代码托管平台(如 GitHub、GitLab 和 Bitbucket)兼容,增强了协作能力。
Git 工作流程图:
1)clone 克隆:从远程仓库中克隆代码到本地仓库。
2)checkout 检出:从本地仓库中检出一个分库分支然后进行修订。
3)add 添加:在提交前先将代码提交到暂存区。
4)commit 提交:提交到本地仓库。本地仓库中保存修改的各个历史版本。
5)fetch 抓取:从远程库抓取到本地仓库中,不进行任何的合并动作,一般操作比较少。
6)pull 拉取:从远程库拉到本地库,自动进行合并,然后放到工作区,相当于 fetch + merge
7)push 推送:修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库。
2.0 Git 的安装和配置
Git 的下载:Git (git-scm.com)
选择:
接着,本地就得到了安装包:
再接着双击,全部直接采取默认配置,一直点 next 即可。如果需要特殊配置,可以进行选择,一般选择默认配置完全够用了。
最后,安装完成之后:
可以看到这两个工具,最常使用的是通过命令来操作。
当安装完 Git 之后首先要做的事情是设置用户名和 email 地址。这是非常重要的,因为每次 Git 提交都会使用该用户信息。
1)打开 Git Bash:
2)设用用户信息:
设置用户信息命令:
该命令设置为: 设置用户名 git config --global user.name "用户名" 该命令设置为: 设置邮箱 git config --global user.email "邮箱"
查看当前用户信息命令:
查看用户名: git config --global user.name 查看邮箱: git config --global user.email
举个例子:
为常用指令配置别名:
有些常用的指令参数非常多,每次都要输入好多参数,此时就可以使用别名。
1)打开用户目录,创建 .bashrc 文件
部分 windows 系统不允许用户创建点号开头的文件,可以打开 gitBash,执行: touch ~/.bashrc 命令。
2)在 .bashrc 文件中输入如下内容:
#用于输出 git 提交日志 alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' #用于输出当前目录所有文件及基本信息 alias ll='ls -al'
可以通过 vi 指令的方式,将以上命令粘贴到 .bashrc 文件中,小提示:粘贴的时候,不能通过 crt + v 的方式,在 gitBash 中通过点击鼠标滚轮进行粘贴。如果从 gitBash 中复制内容,选中需要复制的内容即可。
3.0 获取本地仓库
要使用 Git 对我们的代码进行版本控制,首先需要获得本地仓库:
1)在本地任意位置创建一个空目录,作为我们本地 Git 仓库。
2)进入这个目录中,点击右键打开 Git Bash 窗口。
3)执行命令 git init
4)如果创建成功后可在文件夹下看到隐藏的 .git 目录。
举个例子:
3.1 基础操作指令
Git 工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着执行的 Git 的命令而发生变化。
1)查看修改的状态
查看的修改状态(暂存区、工作区)。
命令形式:
git status
当前创建 text02.txt 文件,再来通过 git status 指令查看修改状态。
2)添加工作区到暂存区
添加工作区一个或多个文件的修改到暂存区。
通过 git add 单个文件名或者通配符,比如:'git add .' 将所有修改加入暂存区、'git add text02.txt' 将 'text.txt02' 文件的修改放到暂存区。
git add
举个例子:
通过 git add . 指令,将文件添加到暂存区中,再来通过 git status 指令查看当前状态。
3)提交暂存区到本地仓库
提交暂存区内容到本地仓库的当前分支。
命令形式:
git commit -m '注释内容'
举个例子:
通过 git commit -m 'commit text02' 指令将其提交到本地仓库中,接着通过 git status 指令来查看暂缓区、工作区情况。可以看到,此时为空状态,无需提交任何内容,工作树干净。
4)查看提交日志
在之前配置中,配置了日志相关的信息。通过 git-log 指令来查看提交记录。
git-log
举个例子:
通过 git-log 来查看提交的日志,之前将 text01 进行了提交,d2ec3cd 可以将其理解为唯一标识,通过该唯一标识可以进行回滚到指定的版本。在日志文件中,处于最开头的日志是最新的日志。HEAD->master:当前的分支为 master 的主分支。
通过 git-log 是来查看提交的日志,而 git status 是来查看暂缓区、工作区的情况。
5)版本回退
版本切换,通过命令形式:
git reset --hard commitID
commitID 可以使用 git-log 或者 git log 指令查看。
举个例子:
回退到 d2ec3cd 版本之后,发现 text02.txt 文件消失了,再通过日志查看,当前状态为 d2ec3cd 。这就是回滚到 d2ec3cd 版本状态。
可以再次回滚到 a5ee363 版本,恢复 text02.txt 文件:
6)添加文件至忽略列表
一般总会有些文件无需纳入 git 的管理,也不希望这些文件出现在未跟踪文件列表。通常都是一些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,可以在工作目录中创建一个名 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。
举个例子:
- 创建 .gitignore 文件:
- 编辑 .gitignore
比如说,将 .a 文件为后缀的不需要进行 git 的管理,则在 .gitignore 文件添加 .a 即可:
提交 .gitignore 文件:
此时可以发现 ign.a 还未添加、提交到本地中,现在来查看当前工作区情况:
此时工作区表示没有文件需要提交,工作树很干净。这就说明了已经忽略 ign.a 文件。
3.2 分支
几乎所有的版本控制系统都以某种形式支持分支,使用分支意味着可以把你的工作从开发主线上分离开来进行重大 Bug 修改、开发新的功能,以免影响开发主线。
1)查看本地所有分支
命令:
git branch
举个例子:
当前分支就只有一个 master 主分支。
2)创建本地分支
命令:
git branch 分支名
举个例子:
成功创建本地分支,不过当前还是处于 master 主分支上。
3)切换分支
git checkout 分支名
举个例子:
从 master 主分支切换到 dev01 分支上。
还可以直接切换到不存在的分支(创建并切换)
git checkout -b 分支名
举个例子:
创建了 dev02 分支且切换到 dev02 分支上。
4)合并分支
一个分支上的提交可以合并到另一个分支。
命令:
git merge 分支名称
举个例子:
当前是 dev02 分支,在该分支上创建且提交了 text03 文件:
接着来到 master 分支上:
可以看到,此时在 master 分支上不存在 text03 文件。
接着将 dev02 分支合并到 master 分支上:
合并完之后,在 master 分支上就出现了 text03 文件了,从日志中看到,此时 master和 dev02 分支都在同一个版本,而 dev01 在先前没有 text03 的版本。
5)删除分支
不能删除当前分支,只能删除其他分支。
删除分支时,需要做各种检查:
git branch -d 分支名
举个例子:
删除分支 dev02:
删除分支时,不需要做任何检查,强制删除:
git branch -D 分支名
6)解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区
- 提交到仓库
举个例子:
在当前版本上创建了 dev01 分支:
接着,在 master 分支上修改 text03 文件:
添加了一行 "Hello Git" 。
将其添加且提交到本地仓库中:
再切换到 dev01,也是对 text03 文件进行修改:
修改的地方是一样的,但是不同内容。
再接着,将 dev01 合并到 master 过程中就会出现冲突:
合并失败,此时可以查看 text03 文件:
因为两个分支对同一个地方进行了修改,git 也不知道如何来解决。
因此,可以通过手动来解决,选择最终的内容:
根据需求,我选择 "Hello Git" 的内容。
最终,再将最终修改的文件添加并提交到本地仓库中:
7)开发中分支使用原则与流程
几乎所有的版本控制系统都以某种方式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的 Bug 修改、开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:
- master 生产分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支。
- develop 开发分支
是从 master 创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同使其上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到 master 分支,准备上线。
- feature 分支
从 develop 创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到 develop 分支。
- hotfix 分支
从 master 派生的分支,一般作为线上 bug 修复使用,修复完成后需要合并到 master、test、develop 分支。
还有一些其他分支,这里就不再过多详述。
4.0 Git 远程仓库
前面已经知道了 git 中存在两种类型的仓库,即本地仓库和远程仓库,那么我们如何搭建 git 远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有 GitHub、Gitee(码云)、GitLab 等
码云(地址:码云官方 (gitee.com))是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快。
GitLab 是一个用于仓库管理系统的开源项目,使用 git 作为代码管理工具,并在此基础上搭建起来的 web 服务,一般用于企业、学校内部网络搭建 git 私服。
4.1 创建远程仓库
先在码云上注册完成,接着就可以搭建远程仓库了:
接着往下走:
点击创建完之后:
4.2 配置 SSH 公钥
一般对于个人来说,不太需要配置这个,我们往该远程仓库推送数据的时候,通过用户名和密码进行验证就行了。对于公司来说,需要配置 SSH 公钥。
1)生成 SSH 公钥
在本地仓库输入如下指令:
ssh-keygen -t rsa
接着不断按回车如果公钥已经存在,则自动覆盖。
获取公钥命令:
cat -/.ssh/id_rsa.pub
获取到 SSH 公钥之后,在码云上设置账户 SSH 公钥:
最后在本地仓库上来验证是否配置成功:
ssh -T git@gitee.com
4.3 操作远程仓库
1)本地仓库与已创建的远程仓库进行对接。
命令:
git remote add <远端仓库的名称> <仓库路径>
远程仓库名称默认是 origin,取决于远端服务器设置。
仓库路径,从远端服务器获取此 URL 。
举个例子:
本地仓库与远程仓库就建立了连接。
2)查看远程仓库
命令:
git remote
举个例子:
3)将本地仓库推送远程仓库
命令:
git push [-f] [--set-upstream] 远端名称 本地分支名:远端分支名
如果远端分支名和本地分支名称相同,则可以只写本地分支:
git push origin master
--set-upstream:推送到远端的同时并且建立和远端分支的关联关系
git push --set-upstream origin master
如果当前分支已经和远端分支关联,则可以省略分支名和远端名:
git push
以上的方法,选择一种适合自己的即可。
举个例子:
将本地仓库的资料推送到远程仓库:
此时查看远程仓库:
这就成功将本地仓库推送到远程仓库了。
4)查看本地分支与远程分支关联关系
命令:
git branch -avv
举个例子:
可以看到本地 master 与远程仓库的 master 是在同一个版本上。
5)从远程仓库克隆到本地仓库
如果已经有了一个远端仓库,我们可以直接 clone 到本地。
命令:
git clone <远程仓库路径> [本地目录]
本地目录可以省略,会自动生成一个目录。
举个例子:
打开文件,这就是从我们之前提交到远程仓库的文件,现在又从远程仓库克隆到另一个本地仓库中。
6)从远程仓库中抓取和拉取
远程分支和本地分支一样,也可以进行 merge 操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
- 抓取命令:
git fetch [remote name] [branch name]
抓取指令就是将仓库里的更新都抓到本地,不会进行合并。
如果不指定远端名称和分支名,则抓取所有分支。
- 拉取命令:
git pull [remote name] [branch name]
拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于 fetch + merge 。
如果不指定远端名称和分支名,则抓取所有并更新当前分支。
举个例子:
现在有两个本地仓库,都是关联同一个远程仓库,版本相同。
当前有一个仓库创建了一个 text04.txt 文件,并且提交本地,再推送到远程仓库:
则另一个仓库就可以通过拉取获取 text04.txt 新增的文件:
6)解决合并冲突
在一段时间,A、B 用户修改了同一个文件,且修改了同一行位置的代码,此时发生合并冲突。
A 用户在本地修改代码后优先推送到远程仓库,此时 B 用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时 B 用户晚于 A 用户,则会推送失败。故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支。
5.0 使用 IEAD 中使用 Git
可以有效地管理代码版本和团队协作。
5.1 在 IDEA 中配置 Git
安装好 IDEA 后,如果 Git 安装在默认路径下,那么 IDEA 会自动找到 git 位置,如果更改了 git 的安装位置则需要手动配置 git 的路径。对于比较新的 IDEA 版本,即使更改了 git 安装路径,IDEA 也能找到 git 的位置。
选择 File -> Setings 打开设置窗口,找到 Version Control 下的 git 选项:
5.2 在 IDEA 中操作 Git
1)初始化本地仓库
假设将当前项目交给 git 进行管理,先将当前项目初始化:
点击 VCS
选择需要管理的项目:
初始化完毕之后,会出现 git 的工具:
2)提交到本地仓库
将项目提交到本地仓库中:
选择需要进行管理的项目文件,再点击提交。
3)推送到远程仓库
将本地仓库推送到远程仓库:
再选择远程仓库:
远程仓库根据 URL 来确定,name 一般默认是 origin 。
这就成功提交到远程仓库中了。
查看远程仓库:
5)克隆远程仓库到本地
如果需要从远程仓库克隆文件到本地,点击 clone:
选择需要克隆的远程仓库:
也可以自动设置本地仓库的位置。
6)分支
通过 git 的控制台,可以对分支进行操作:
查看分支:
当前分支有本地分支 master 和远程分支 master 。
创建本地分支:
切换分支:
通过点击不同的分支,来进行切换。
合并分支:
删除分支: