Java 基础语法:Git

3405 字
17 分钟
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由于是分布式的,大多数操作(如提交、分支、合并等)都在本地完成,只有当需要与其他人分享工作时才需要网络交互。

image-20220526111136071
image-20220526111136071

image-20220526111920966
image-20220526111920966

git学了 svn也会用。因为命令基本类似。

安装Git#

下载
image-20220526113317513
image-20220526113317513
#

官方下载地址

安装#

直接傻瓜式安装即可。

image-20220526113721503
image-20220526113721503

安装的时候,要注意 让Windows 记住登录凭证

Git的使用#

Git核心流程#

image-20220526113143360
image-20220526113143360

Git 命令#

注册相关网站#

以Gitee为例。

  • 记住注册的时候 使用的
    • 用户名(推荐使用英文)
    • 密码
    • 手机号
    • 邮箱(可以注册后自行设置)

密码一定要记得。

建立远程仓库#

image-20220526114956920
image-20220526114956920

clone#

把远程仓库,克隆到本地。(一定是第一次)

.git文件夹,是git自己的元信息的一个文件夹,大家不要动。

Terminal window
# 下载远程仓库的内容,并且在本地创建一个和远程仓库名同名的文件夹
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#

这个命令可以帮助我们查看工作区和缓冲区中的变化。

工作区中的变化

缓冲区中的变化

image-20220526144014440
image-20220526144014440

add#

这个命令可以帮助我们把工作区中的变化提交到缓冲区。

Terminal window
# 有以下的三种提交方式
# 文件的名字
git add fileName
# 文件的类型,通配符添加
# 只添加 .java文件结尾的文件 。从工作空间提交到缓冲区
git add *.java
# 所有文件
git add .

commit#

我们这个commit,和我们在写论文的时候,什么比较像?提交了一个版本。

commit这个命令可以帮助我们把git仓库中 缓冲区中的内容提交到本地仓库。

第一次提交的时候,需要设置 用户名和邮箱

有两种设置的方式

  • 直接去用户目录下,设置 .gitconfig 这个文件,假如没有这个文件,就创建一个

    [user]
    name = ciggar
    email = 291136733@qq.com
  • 执行命令去设置

    Terminal window
    git config --global user.email 222@qq.com
    git config --global user.name xxx

设置完之后,就可以提交了,会产生一个版本信息

image-20230111111257900
image-20230111111257900

这一步需要大家注意几件事情:

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

    image-20220526145749580
    image-20220526145749580

push#

image-20230111111257900
image-20230111111257900

push这个命令可以帮助我们把本地仓库中的所有变化 推送到远程仓库。

  • 这一步在第一次操作的时候,需要去填写对应用户名和密码

image-20220526150144318
image-20220526150144318

push的时候,能不能指定文件去 push呢? 不能

只有当本地仓库中的版本领先于远程仓库的时候,才可以push

pull#

会拉取远程仓库中的所有的变化到本地。并且会显示出版本号

image-20220526151312030
image-20220526151312030

当本地仓库中的版本落后于远程仓库的时候,就要pull

“ 落后就要pull”

log#

查看仓库中的所有的版本信息

image-20220526151518200
image-20220526151518200

协作开发#

邀请成员加入仓库#

不管是 开源的仓库,还是私有的仓库,都是 只有仓库中的成员才能去修改仓库中的代码。

  • 开源:所有人都可以访问到
  • 私有:只有仓库指定的成员才能看到

image-20220526152352372
image-20220526152352372

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

处理冲突#

模拟冲突处理流程:

image-20220526162705623
image-20220526162705623

总结:

  1. 先push的人不处理冲突,后push的人要处理 冲突
  2. 和组员一起开发的时候,尽量不要开发同一个文件,很容易产生冲突
  3. push之前最好先pull一下,不然可能会push失败
    • 早上上班之后,第一件事情,拉取最新的代码(pull)
    • 晚上下班之前,最后一件事情,把最新的本地代码推送上去(push)。代码一定要能编译通过有没有bug无所谓。

冲突的处理

<<<<<<<< HEAD
===============
>>>>>>>>> fgfskljasdljdlkasjksalk
// 左到=。就是你自己的代码版本 <<<<<<<<< --> ============
// =到> 是远端的版本 ========= --> >>>>>>>>>>>>
需要告诉git,如果保留代码。 比如是留你的版本,还是留你同事版本。
1.留代码
2.删除分隔符
3. 处理好所有的冲突之后, git add . ; git commit -m "处理和同事1的冲突"
4. push 。 需要抓紧push,防止别人又push了代码

多练习。

后悔药#

Git给我们提供了一些可以回退的措施,也叫作后悔药。

image-20220526163624301
image-20220526163624301

  • git checkout

    需要指定需要回退的文件

    Terminal window
    $ git checkout text.txt
    $ git checkout .

    这个命令,危险吗? 危险!慎用

    注意:回退的内容,是找不回来的,要慎用。比如你写了一天的代码,都是

    在工作区的。

  • git reset

    把缓冲区中的变化,回退到工作区。注意:git reset不会改变文件中的内容

    问题:能不能指定文件reset呢? 能

  • git reset —hard version

    将当前分支的头部(HEAD)重置到指定的提交版本号,并且会清除工作目录和暂存区中的所有更改

    image-20220526171556679
    image-20220526171556679

忽略文件#

git在做版本控制的时候,可以让我们忽略一些文件,不去追踪这个仓库中这些文件的变化。

怎么做呢?

  • 可以在Git仓库的根目录下 添加 一个 .gitignore 这个名字的文件,可以在这个文件中声明哪些文件不被git追踪版本信息

对于Java项目来说,我们可以忽略哪些内容呢?

# 单个文件
xxx.txt
# 配置文件夹
.idea
# 配置文件的类型
*.iml
target/*.class

注意事项:

  1. 忽略文件最好是在创建这个远程仓库的时候,就应该自动创建出来

    image-20220526172640586
    image-20220526172640586

  2. 一旦一个文件已经被追踪并且提交到远程仓库中去了,那么再在.gitignore 这个文件中去忽略它的变化,是无效的

分支管理#

Git分支是Git版本控制系统中的一种重要概念,用于在同一个Git仓库中独立开发多个功能或特性。在Git中,每个分支都代表着仓库中的一个完整版本,并且可以在分支上进行独立的开发和提交。

使用分支的好处是可以让多个人在同一个仓库中同时进行开发,不会相互干扰,同时也可以随时回到之前的某个状态进行修复或重新开发。当一个分支的开发完成后,可以将其合并到主分支或其他分支上。

Git默认创建一个主分支,通常称为“master”或“main”,其他分支可以基于主分支或其他分支创建,每个分支都有一个唯一的名称。在开发过程中,可以在不同的分支之间进行切换,以便进行不同的工作。例如,可以创建一个分支来解决某个bug,同时在另一个分支上开发一个新的功能,而不会影响彼此之间的工作。

总之,Git分支是一种非常有用的功能,可以帮助开发人员更好地管理代码并提高开发效率。

image-20230331144756796
image-20230331144756796

分支操作

Terminal window
# 查看所有本地分支
$ 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路径

image-20230406111436344
image-20230406111436344

点击Test有版本。

如果项目被git追踪了,则idea中会有对应的颜色提示。

红色代表是新增的文件

蓝色代表是文件有改动

绿色代表已经提交。其他的操作与git基本操作一致。

在文件中,可以看到文件的变动

image-20230406112925347
image-20230406112925347

git可以右键,然后add commit 提交信息。

备注:

  • 学完之后,要多练习git。把日常的代码,使用git管理起来。因为后面写项目的时候,要大量使用git。
  • 先使用命令行,不要使用idea中的可视化。用命令行,你可以清楚的知道发生了什么。
  • 多练习一下分支
  • 冲突处理一定要会。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Java 基础语法:Git
https://firefly-mu-weld.vercel.app/posts/26-git/
作者
Daisy
发布于
2026-06-10
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Daisy
Hello, I'm Daisy.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签

文章目录