Java 基础语法:Git
Git
学习目标:
- git是什么,用来解决什么问题
- 掌握git的核心流程(工作区、暂存区、本地仓库)
- 熟练git的核心命令
- 如何处理冲突
- git的分支是什么,有什么好处
- 了解企业中分支的使用方式
- 在idea上进行git操作
参考书籍: https://www.progit.cn/
介绍
Linus 的第二个伟大作品。2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。Linus迫不得己自己开发了一个分布式版本控制工具,从而Git诞生了。 据说Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git。一个月之内,Linux系统的源码已经由Git管理了。
Git 是一个版本控制工具。可以记录和追踪 某个文件 在某一个时刻的内容和状态。
Git的使用有点像一个 网盘,这个网盘大家都可以来操作。只是Git比网盘要高级一点,体现在哪里呢?其实就是Git可以追踪这个网盘 中 文件的历史版本状态。
Git 可以 记录某个文件夹下的 不同文件 在不同时间节点的不同状态。Git可以去记录这些文件产生的变化
发展历史:Linus,为了管理Linux的核心代码来开发的一个分布式的版本控制工具。
Git的特点:
- 分布式
- 离线可用
- 可以回退
Git和SVN的对比
-
SVN:集中式版本控制工具
- SVN是一种集中式版本控制系统(CVCS),它有一个中央仓库,所有的文件版本信息都存储在这个中心服务器上。用户需要与中央服务器交互来更新或提交更改。
- SVN的操作(如提交和更新)通常需要与中央服务器通信,这意味着在没有网络连接的情况下,这些操作无法执行。
-
Git:分布式版本控制工具
- Git是一种分布式版本控制系统(DVCS),每个开发者的电脑上都是一个完整的仓库,包含所有的历史记录和版本跟踪信息。这允许开发者在离线时也能进行大部分的版本控制操作。
- Git由于是分布式的,大多数操作(如提交、分支、合并等)都在本地完成,只有当需要与其他人分享工作时才需要网络交互。


git学了 svn也会用。因为命令基本类似。
安装Git
下载
image-20220526113317513

安装
直接傻瓜式安装即可。

安装的时候,要注意 让Windows 记住登录凭证
Git的使用
Git核心流程

Git 命令
注册相关网站
以Gitee为例。
- 记住注册的时候 使用的
- 用户名(推荐使用英文)
- 密码
- 手机号
- 邮箱(可以注册后自行设置)
密码一定要记得。
建立远程仓库

clone
把远程仓库,克隆到本地。(一定是第一次)
.git文件夹,是git自己的元信息的一个文件夹,大家不要动。
# 下载远程仓库的内容,并且在本地创建一个和远程仓库名同名的文件夹git clone https://gitee.com/common-zhou/test_50th.git
# 克隆远程仓库,到本地,文件夹的名字叫做 test53th1。如果文件夹不存在,会创建一个。# 如果文件夹存在,会使用这个文件夹。(有个前提,一定是空的。如果不是空的,会报错)git clone https://gitee.com/common-zhou/test53th.git test53th1
git clone https://gitee.com/ciggar/test-40th.git dirName在git中管理文件的版本,需要使用文本文件。
.txt .md ; 不要使用docx pptx
在git中,对比文件的变化,是一行一行来进行比较的。所以我们需要追踪文本文件,docx是类似压缩包的文件,没有办法对比每一行。
status
这个命令可以帮助我们查看工作区和缓冲区中的变化。
工作区中的变化
缓冲区中的变化

add
这个命令可以帮助我们把工作区中的变化提交到缓冲区。
# 有以下的三种提交方式
# 文件的名字git add fileName
# 文件的类型,通配符添加# 只添加 .java文件结尾的文件 。从工作空间提交到缓冲区git add *.java
# 所有文件git add .commit
我们这个commit,和我们在写论文的时候,什么比较像?提交了一个版本。
commit这个命令可以帮助我们把git仓库中 缓冲区中的内容提交到本地仓库。
第一次提交的时候,需要设置 用户名和邮箱
有两种设置的方式
-
直接去用户目录下,设置 .gitconfig 这个文件,假如没有这个文件,就创建一个
[user]name = ciggaremail = 291136733@qq.com -
执行命令去设置
Terminal window git config --global user.email 222@qq.comgit config --global user.name xxx
设置完之后,就可以提交了,会产生一个版本信息

这一步需要大家注意几件事情:
- 这一步会产生一个文件的版本号,只是前7位。
- 如果是第一次commit,需要设置用户名和邮件地址
- 只会把缓冲区中的变化提交到本地仓库,不会把工作区中的变化提交到本地仓库
- commit的时候需要指定提交的信息,提交的信息一般要去设置模板
# 提交git commit -m "msg"## msg:msg信息一般要有统一的格式 例如:描述信息 (issue号)# 1.描述信息 (issue号)# 2.(issue号) 描述信息
git commit -m "某某bug的修改"git commit -m "HashMap的练习"
# 尽量做到,见到描述信息可以知道这次提交是干什么的。# 不要写什么 1 abc#-
设置完之后,就可以提交了,会产生一个版本信息

image-20220526145749580
push

push这个命令可以帮助我们把本地仓库中的所有变化 推送到远程仓库。
- 这一步在第一次操作的时候,需要去填写对应用户名和密码

push的时候,能不能指定文件去 push呢? 不能
只有当本地仓库中的版本领先于远程仓库的时候,才可以push
pull
会拉取远程仓库中的所有的变化到本地。并且会显示出版本号

当本地仓库中的版本落后于远程仓库的时候,就要pull
“ 落后就要pull”
log
查看仓库中的所有的版本信息

协作开发
邀请成员加入仓库
不管是 开源的仓库,还是私有的仓库,都是 只有仓库中的成员才能去修改仓库中的代码。
- 开源:所有人都可以访问到
- 私有:只有仓库指定的成员才能看到

私有仓库只能添加总共五个管理员(带主账号)。所以如果想把整个小组都拉进来,可以把仓库设置成公开仓库,可以添加小组全部成员。
处理冲突
模拟冲突处理流程:

总结:
- 先push的人不处理冲突,后push的人要处理 冲突
- 和组员一起开发的时候,尽量不要开发同一个文件,很容易产生冲突
- push之前最好先pull一下,不然可能会push失败
- 早上上班之后,第一件事情,拉取最新的代码(pull)
- 晚上下班之前,最后一件事情,把最新的本地代码推送上去(push)。代码一定要能编译通过有没有bug无所谓。
冲突的处理
<<<<<<<< HEAD
===============
>>>>>>>>> fgfskljasdljdlkasjksalk
// 左到=。就是你自己的代码版本 <<<<<<<<< --> ============ // =到> 是远端的版本 ========= --> >>>>>>>>>>>>
需要告诉git,如果保留代码。 比如是留你的版本,还是留你同事版本。 1.留代码 2.删除分隔符 3. 处理好所有的冲突之后, git add . ; git commit -m "处理和同事1的冲突" 4. push 。 需要抓紧push,防止别人又push了代码多练习。
后悔药
Git给我们提供了一些可以回退的措施,也叫作后悔药。

-
git checkout
需要指定需要回退的文件
Terminal window $ git checkout text.txt$ git checkout .这个命令,危险吗? 危险!慎用
注意:回退的内容,是找不回来的,要慎用。比如你写了一天的代码,都是
在工作区的。
-
git reset
把缓冲区中的变化,回退到工作区。注意:git reset不会改变文件中的内容
问题:能不能指定文件reset呢? 能
-
git reset —hard version
将当前分支的头部(HEAD)重置到指定的提交版本号,并且会清除工作目录和暂存区中的所有更改

image-20220526171556679
忽略文件
git在做版本控制的时候,可以让我们忽略一些文件,不去追踪这个仓库中这些文件的变化。
怎么做呢?
- 可以在Git仓库的根目录下 添加 一个
.gitignore这个名字的文件,可以在这个文件中声明哪些文件不被git追踪版本信息
对于Java项目来说,我们可以忽略哪些内容呢?
# 单个文件xxx.txt
# 配置文件夹.idea
# 配置文件的类型*.iml
target/*.class注意事项:
忽略文件最好是在创建这个远程仓库的时候,就应该自动创建出来
image-20220526172640586 一旦一个文件已经被追踪并且提交到远程仓库中去了,那么再在.gitignore 这个文件中去忽略它的变化,是无效的
分支管理
Git分支是Git版本控制系统中的一种重要概念,用于在同一个Git仓库中独立开发多个功能或特性。在Git中,每个分支都代表着仓库中的一个完整版本,并且可以在分支上进行独立的开发和提交。
使用分支的好处是可以让多个人在同一个仓库中同时进行开发,不会相互干扰,同时也可以随时回到之前的某个状态进行修复或重新开发。当一个分支的开发完成后,可以将其合并到主分支或其他分支上。
Git默认创建一个主分支,通常称为“master”或“main”,其他分支可以基于主分支或其他分支创建,每个分支都有一个唯一的名称。在开发过程中,可以在不同的分支之间进行切换,以便进行不同的工作。例如,可以创建一个分支来解决某个bug,同时在另一个分支上开发一个新的功能,而不会影响彼此之间的工作。
总之,Git分支是一种非常有用的功能,可以帮助开发人员更好地管理代码并提高开发效率。

分支操作
# 查看所有本地分支$ git branch
# 创建一个新的分支git branch 分支名
# 创建分支并切换 iss53$ git checkout -b iss53
# 切换分支$ git checkout iss53
# 合并分支$ git merge iss53工作过程中的一般使用步骤
# 一般会有一个master 主分支# 会有一个dev分支
# 1. 如果有需求,会从dev拉一个分支,比如 dev-feature1,所有的提交都提交在这个分支上# 1.1 从dev拉取一个分支,并切换到这个分支git checkout -b dev-feature1
# 2. 等到开发完成,会把这个分支合并到dev。 dev经过测试,会合并到master# 2.1先切换到dev分支git checkout dev
# 2.2合并刚刚的分支git merge dev-feature1本地分支与远程分支
# 查看所有本地与远程分支$ git branch -a
# 本地分支推送远程分支 (假设此时在本地dev分支,想要push到远程的dev)git push origin dev
# 如果push失败,说明本地dev与远程dev没有建立追踪关系 建立关系后就可以方便直接 git pull/push# 查看本地分支与远程分支关系git branch -vv
# 为已有的本地分支与已有的远程分支建立追踪关系git branch --set-upstream-to=origin/远程分支名 本地分支名# 比如:git branch --set-upstream-to=origin/dev dev
# 假如远程分支已经存在(origin/dev已经存在) 可以在创建本地分支dev的时候就建立与远程分支的追踪关系git branch -b dev origin/dev在idea上进行git操作
首先配置好git路径

点击Test有版本。
如果项目被git追踪了,则idea中会有对应的颜色提示。
红色代表是新增的文件
蓝色代表是文件有改动
绿色代表已经提交。其他的操作与git基本操作一致。
在文件中,可以看到文件的变动

git可以右键,然后add commit 提交信息。
备注:
- 学完之后,要多练习git。把日常的代码,使用git管理起来。因为后面写项目的时候,要大量使用git。
- 先使用命令行,不要使用idea中的可视化。用命令行,你可以清楚的知道发生了什么。
- 多练习一下分支
- 冲突处理一定要会。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
