使用Git进行项目版本控制

文章目录

1、什么是Git?

GIT,全称是分布式版本控制系统,git通常在编程中会用到,并且git支持分布式部署,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

本地式 VS 集中式 VS 分布式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GG5ooPy1-1691719294411)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208142837991.png)]

2、安装Git

安装包素材:链接

也可以去官网下载你想要的版本

Git官网

点击图标进行安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3o2M8c68-1691719294413)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208110721176.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Mr5CjwP-1691719294414)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208110753487.png)]

选择安装路径 —》点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cVRE8Cb6-1691719294414)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208110851537.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lu0v8oQG-1691719294414)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208110909102.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xwyiDCGi-1691719294415)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208110935288.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQ6fbLQW-1691719294415)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208110950424.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHOeAEIV-1691719294415)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111005281.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FGPi1JXp-1691719294415)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111022526.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ae0Womik-1691719294416)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111035429.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P4cyCiA5-1691719294416)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111101508.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygu7UqlF-1691719294416)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111115463.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXvaPB4u-1691719294416)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111132852.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OR3ovXQK-1691719294417)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111149388.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0eozLlrE-1691719294417)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111203195.png)]

点击下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWLFLP3R-1691719294417)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111219528.png)]

点击安装 —》进行安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f4vGX1Ze-1691719294418)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208111239616.png)]

安装完成

3、Git汉化

Git汉化分为两部分:汉化Git Bash和汉化Git GUI。

3.1 Git Bash汉化

Git Bash的汉化很简单,只需要在命令行界面点击右键-选择option-Windows-然后在里面将language设置成中文就可以了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rZo6elOK-1691719294418)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208135336129.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OEtrN6u9-1691719294418)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208135340348.png)]

3.2 Git GUI汉化(了解)

Git GUI,想要设置成中文就显得没那么容易了。打开设置里面,全是密密麻麻的的英文,而且找了半天也没找到对应的语言设置,那么到底应该怎么设置Git GUI的中文显示呢?

其实Git GUI本身是真的没有这个语言设置选项的,所幸的是网上已有网友针对其开发出了对应的汉化包,我们只需要下载安装即可,具体可见https://github.com/stayor/git-gui-zh。

下载下来之后,将其放到安装目录下:/mingw64/share/git-gui/lib/msgs/zh_cn.msg,有可能Git的安装路径下面没有msgs这个文件夹,那么需要自己创建之后再将这个汉化包来放进去。这样就算是汉化完了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHGRhIp0-1691719294418)(E:\PRD\Images\image-20230805112512515.png)]

未设置前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oguWLTC-1691719294419)(E:\PRD\Images\image-20230805112636583.png)]

设置后,重新打开软件,你就会发现软件界面已经变成了熟悉的中文了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VlP2LQq1-1691719294419)(E:\PRD\Images\image-20230805112900871.png)]

4、快速上手Git基本命令

只要学会如下Git的十个命令,在日常的开发工作中基本可以应付了。在后面的学习中进行详细了解。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlSqI7hx-1691719294419)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208142952319.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oJBAUE40-1691719294420)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208143015276.png)]

5、Git是怎么运作的?

从两方面来了解Git是怎么运作的,第一个我们先认识一下Git的几个重要的区域,第二个是Git具体是怎么工作的。

首先我们来回顾下,我们在1中讲过,Git是一个分布式的版本控制系统,在这个分布式的版本控制系统中,它会有一个远程的服务器Server Computer,然后会有多个分布式的客户端Computer A与Computer B等,在分布式的客户端中如何想使用远程服务器中的最新代码,它就需要从远程的仓库里去拉取最新代码。在拉取最新代码到本地仓库后,它自己就能形成一个版本控制系统。这个版本控制系统除了可以跟远程仓库进行交互以外,也可以与其他的分布式客户端共享版本信息。然后即使再跟远程仓库断开连接的情况下,它也能够正常运转,因为它自身也是一个版本控制系统。

那么我们是如何将分布式客户端里的文件推送到远程的仓库中并自动生成版本号呢?首先我们来了解下几个重要的区域

6、工作区、暂存区、本地仓库、远程仓库的区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MpYp4RgB-1691719294420)(E:\PRD\Images\image-20221208143707889.png)]

6.1 工作区

工作区是指你当前正在工作的项目目录,其中包含了项目的源代码、资源文件和其他相关文件。工作区是你进行开发、修改和测试代码的地方。

6.2 暂存区

暂存区是Git版本控制系统中的一个概念,它是连接工作区和本地仓库的缓冲区域。在对工作区的修改进行提交之前,你可以使用 git add 命令将修改的文件添加到暂存区。暂存区允许你对即将提交的文件进行选择性的添加和修改,为你提供对提交更加精细的控制。

6.3 本地仓库

本地仓库是存储Git项目的完整历史记录和版本信息的地方。当你在项目目录使用 git init 命令时,Git会在你的项目目录中创建一个本地仓库,并开始记录项目的所有更改和提交历史。本地仓库只能被本地访问和管理,并且可以在本地进行回滚、分支管理等操作。

6.4 远程仓库

远程仓库是位于网络上的一个Git仓库,用于远程团队成员之间的代码共享和版本控制。一个远程仓库可以托管在代码托管服务(如GitHub、GitLab等)或者自建的私有服务器上。通过与远程仓库进行交互,你可以将本地的变更推送到远程仓库、获取最新的变更、与其他开发者协同工作等。

6.5 总结

简而言之,工作区是你当前正在进行开发的目录,暂存区是用于临时存放即将提交的文件的缓冲区域,本地仓库是存储Git项目完整历史记录和版本信息的地方,远程仓库是位于网络上用于代码共享和协同开发的Git仓库。它们在不同的层级上承担着不同的角色和功能,协同工作来提供版本控制和团队协作的能力。

6.6 排除不需要的文件

1. .gitignore文件的作用

.gitignore文件的主要作用是帮助开发者配置不需要加入版本管理的文件,同时提高代码质量。这个文件对所在的目录及其所有子目录均有效。例如,有些时候,你需要在Git的工作目录中加入某些需要的文件,例如一些新增的配置文件等,这时候就可以通过编辑.gitignore文件来排除这些不需要的版本控制的文件。

2. .gitignore 文件的语法如下:
  1. # 开头表示注释,# 后面的内容都会被 Git 忽略。可以使用反斜杠 \ 进行转义。
  2. / 表示目录,* 表示匹配任意字符(除斜杠外),? 表示匹配一个字符,[...] 表示匹配方括号内的任意一个字符。
  3. ** 表示递归匹配子目录及其子目录下的所有文件和文件夹。
  4. ! 表示取反,即不匹配该规则的文件或目录。
  5. *?[...][!...]{}()等符号前面可以加上 //**/ 来指定匹配路径的模式。
  6. / 结尾的模式只匹配该文件夹以及在该文件夹路径下的内容,但是不匹配该文件。
  7. /开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。
  8. 如果一个路径在多个规则中出现,那么只有最后一个规则生效。
  9. 如果一个文件同时满足多个规则,那么只有第一个被匹配的规则生效。
3. Java项目中常用的.gitignore文件
# Compiled class file
*.class

# Eclipse
.project
.classpath
.settings/

# Intellij
*.ipr
*.iml
*.iws
.idea/

# Maven
target/

# Gradle
build
.gradle

# Log file
*.log
log/

# out
**/out/

# Mac
.DS_Store

# others
*.jar
*.war
*.zip
*.tar
*.tar.gz
*.pid
*.orig
temp/
4. 在 Git 中使用 .gitignore 文件时,需要注意以下几点:

如果将某个文件或文件夹添加到了 .gitignore 文件中,但已经将其提交到了版本控制中,那么 Git 将不会忽略该文件或文件夹。需要先从 Git 中删除该文件或文件夹,然后再添加到 .gitignore 文件中。
如果在 .gitignore 文件中使用了通配符,那么 Git 会忽略所有符合该通配符的文件或文件夹。如果只想忽略特定类型的文件,而不是所有符合该通配符的文件,可以使用 * 通配符。例如,要忽略所有 .log 文件,但保留其他以 .lo 开头的文件,可以使用 *.log。
在 Windows 系统上,文件名大小写不敏感,而在其他操作系统上则相反。因此,需要根据目标操作系统选择正确的文件名规则。

7、 Git具体工作流程

7.1 Git的Clone(克隆)命令与Fetch(提取)命令

首先刚开始的情况下,你的本地电脑上面肯定是没有代码的,这时候你需要从远程服务器上去拉取代码到你本地,这时候我们可以使用Git的Clone命令——实现在本地IDE工具中没有代码的情况下,从远程仓库中克隆一整个仓库的所有信息到你的本地仓库里面来。

如果在本地的IDE工具中已经有远程仓库中的代码,其他人又往远程仓库中推送了更新的代码,如果你要去拉取别人推送的更新代码下来,你要怎么做呢?你可以使用Fetch命令(即Fetch命令是在本地有远程仓库里的代码情况下,再从远程仓库中拉取最新代码)。

(从远程仓库中去拉取数据到本地,第一次是Clone,之后全部都使用Fetch命令。)

7.2 Merge (合并之意)

我们刚刚说的CloneFetch命令都是远程仓库到本地仓库,但是我们实际上写代码的区间是在工作区,所以还需要将保存到本地仓库中的代码拉取到工作区,这时我们可以使用Merge命令从本地仓库把代码拉取到本地工作区

我们在第一次使用Clone命令在本地没有代码的情况下,将远程仓库里的代码克隆到本地后,要想再从远程仓库获取最新代码就必须使用**Fetch命令提取到本发仓库,再使用**Merge命令从本地仓库拉取代码到工作区,这种操作会有一点麻烦,所以我们有一个简化的命令叫Pull

7.3 Pull命令 (拉取)

Pull的功能是从远程仓库中直接Merge代码到本地仓库,并且自动Merge代码到工作区。所以Pull命令是Fetch命令与Merge命令之和。 Pull = Fetch + Merge

如果你当前分支与远程分支之间没有冲突,git pull 将会自动执行合并操作,并将远程更新应用到你的本地分支。

如果存在冲突,git pull 将会提示你解决冲突。你需要手动解决冲突,并提交解决后的文件,然后才能完成合并操作。

需要注意的是,git pull 默认以 fast-forward(快进) 模式合并远程分支,这意味着只有当远程分支的提交历史可以直接连接到本地分支的提交历史时,才会执行快进合并。如果你希望强制执行合并操作,可以使用 git pull --no-ff 命令。

7.4 Checkout命令(签出)

假设你自己有个多分支需要去切换,比如要修改bug,我们就创建一个新分支用于修改bug,在修改完bug后将这个分支再合并到master主分支上面来。这个时候就需要使用Checkout命令实现分支间的切换。

7.5 Add命令(添加)

Add命令是将工作区的代码添加到暂存区。

7.6 Commit命令(提交)

再通过Commit命令将保存到暂存区的代码提交到工作仓库,这样本地仓库中就保存到了提交过来的代码版本信息。

然后未来如果我们在写代码的过程中写错了,我们也可以从本地仓库中重新拉取之前写过的代码合并回去(把旧版本合回去),这样就可以使我们避免一些损失、消耗。

7.7 Push命令(推送)

在提交到本地仓库的代码版本信息确认无误后,我们就可以使用Push命令将本地仓库保存的代码推送到远程仓库中。

7.8 "Commit and Push"按扭

"commit and push"是一个按扭,在保存到工作区的代码在使用add添加到暂存区后,我们可以点击 “commit and push” 这个按扭,直接将保存在暂存区的代码推送到远程仓库

8、Git上传代码流程

8.1 新建Git仓库

点击 + 号 —》新建仓库 —》选择对应的语言 —》点击创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BBPpSWr-1691719294420)(E:\PRD\Images\image-20230808160538080.png)]

代码仓库(这个就是建成之后的效果)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81TBC1SR-1691719294421)(E:\PRD\Images\image-20230808161614977.png)]

8.2 打开Gitee创建私人令牌

用于编辑工具访问我们Git上面的项目

点击主页 —》私人令牌 —》生成新令牌 进行token令牌生成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2rU6jTn2-1691719294422)(E:\PRD\Images\image-20230808162624294.png)]

添加描述 —》添加权限 —》点击提交 —》进行密码验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yyAUHmI-1691719294422)(E:\PRD\Images\image-20230808162928738.png)]

注意: 私人令牌记得找个地方保存下来,不然每次需要使用的时候都需要重新生成。

点击复制 —》 勾选 —》然后点击确认并关闭

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSL3dSas-1691719294422)(E:\PRD\Images\image-20230808163141500.png)]

8.3 使用Idea进行代码更新

8.3.1 打开Idea配置Git

然后打开Idea,进入设置。右击文件 —》设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IOX0hKd-1691719294423)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208154315560.png)]

打开版本控制 —》Git —》修改Git安装路径 —》点击测试(显示版本号就证明配置成功了) —>点击确定

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NOmhUK58-1691719294423)(E:\PRD\Images\image-20230808164024912.png)]

8.3.2 添加Gitee账号

打开版本控制,可以看到现在我们的列表里面还没有Gitee

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-csNbXcJ9-1691719294423)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208154414875.png)]

打开插件搜索 Gitee —》安装 —》应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIv9STbT-1691719294424)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208154545146.png)]

现在可以看到我们的版本控制里面有Gitee了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPLvP97w-1691719294424)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208154658885.png)]

打开版本控制 —》Gitee —》点击 + 号或者添加账户 —》添加Token令牌进行验证(也可以使用账号密码登录Gitee账号,第一个选项就是通过账号密码登录)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qlFN1zKM-1691719294424)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208154818902.png)]

然后将我们刚才生成的Token添加进去 — 》再点击添加账号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIvJc8AF-1691719294425)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208160057876.png)]

可以看到账号已经添加成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EOrVvt17-1691719294425)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208160218297.png)]

然后就可以对我们Gitee上面的项目进行版本控制了

打开Gitee —》点击(克隆/下载)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzFBR8AV-1691719294425)(E:\PRD\Images\image-20230808164654861.png)]

然后点击HTTPS —》进行代码地址复制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wP7d6vmj-1691719294425)(E:\PRD\Images\image-20230808164802362.png)]

点击文件 —》新建 —》来自版本控制的项目 —》进行Gitee上面的项目导入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPpRp1k3-1691719294426)(C:\Users\11\AppData\Roaming\Typora\typora-user-images\image-20221208161201771.png)]

将复制的代码地址放入到URL框中 —》 点击克隆 —》进行代码克隆

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KYnlIhcG-1691719294426)(E:\PRD\Images\image-20230808165043627.png)]

第一次是clone我们的远程仓库中的代码,什么都没有,然后我们就可以进行框架的搭建,进行项目的编写了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eXsuAg0d-1691719294427)(E:\PRD\Images\image-20230808165338354.png)]

8.3.3 模拟项目成员向代码仓库推送代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h09fD2Jh-1691719294427)(E:\PRD\Images\image-20230808170755821.png)]

输入文件名称 —》编写文件内容 —》输入提交信息 —》 点击提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zx885ngJ-1691719294427)(E:\PRD\Images\image-20230808172827274.png)]
选择分支 —》点击提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3NBtRbI-1691719294427)(E:\PRD\Images\image-20230808172935847.png)]

8.3.4 Git更新操作(Fetch,Merge)

这种操作不是很方便,需要提取再进行合并(这个操作是用于将代码仓库中最新的代码合并到工作区)

  1. 第一步Git->Fetch拉取到本地仓库

在Git中,git fetch是用于从远程仓库获取最新的提交和分支信息的命令。它不会自动合并或修改你的本地分支,而仅仅将最新的远程变更下载到本地。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDMKh1rv-1691719294428)(E:\PRD\Images\image-20230808173140236.png)]

  1. 第二步Git->Merge 将工作区的代码与本地仓库进行比较

在Git中,git merge是将一个分支的变更合并到另一个分支的操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUh7juLo-1691719294428)(E:\PRD\Images\image-20230809085827036.png)]

  1. 最终效果

可以看到我们的工作区已经将最新变更给合并了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBI2VhyR-1691719294428)(E:\PRD\Images\image-20230809102135567.png)]

8.3.5 Git更新操作(Pull)

1. 第一步

查看目前代码的修改状态 (git status)

2. 第二步

暂存需要提交的文件(git add “文件名”)

3. 第三步

提交已暂存的文件(git commit -m “提交日志内容”) 注意:这个内容必须填写,不然提交不了

先将更新的文件添加到暂存区 —》然后提交到本地仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CY6aeiev-1691719294429)(E:\PRD\Images\image-20230809103018208.png)]

点击要提交的最新文件 —》提交的消息 —》提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drMgHwvR-1691719294429)(E:\PRD\Images\image-20230809111019346.png)]

提交成功,没报错就是成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIeNzRCp-1691719294429)(E:\PRD\Images\image-20230809111240050.png)]

4. 第四步

git pull

在提交项目之前必须先对项目进行更新,此项特别重要,如果不进行更新,别人有项目提交到服务器上,那么你的项目将会提交不上去,使用git解决冲突会比较麻烦,即使你解决了冲突,但是有时候不注意会冲掉别人写的代码,不像svn使用那么简单,所以推送自己项目前必须进行更新(特别重要)

如图1:选择Pull进行更新代码操作;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3uXEneQ-1691719294430)(E:\PRD\Images\image-20230809111203892.png)]

拉取成功,没报错就是成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kyjIyVCV-1691719294430)(E:\PRD\Images\image-20230809111303748.png)]

8.3.6 代码提交(Push)

1. 第一步

git push -u origin master

在拉取项目的时候我们已经将最新的代码拉取到本地仓库了,可以直接进行推送了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-23e3TXkR-1691719294430)(E:\PRD\Images\image-20230809111502474.png)]

选择要推送的分支 —》点击推送

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K4R7VB6m-1691719294430)(E:\PRD\Images\image-20230809111730628.png)]

推送成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1xURqlQZ-1691719294431)(E:\PRD\Images\image-20230809111856169.png)]

至此本地库的代码就成功的提交到远程库,可以在远程库查看更新的代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9NX7hTI-1691719294431)(E:\PRD\Images\image-20230809112116227.png)]

8.3.7 代码冲突
1. 什么是冲突

冲突是指当你在提交或者更新代码时被合并的文件与当前文件不一致。

2. 冲突的场景
  • 更新代码

  • 提交代码

  • 多个分支代码合并到一个分支时

  • 多个分支向同一个远端分支推送代码时

git的合并中产生冲突的具体情况:
  <1>两个开发者(分支中)修改了同一个文件(不管什么地方)
  <2>两个开发者(分支中)修改了同一个文件的名称
  注意:两个分支中分别修改了不同文件中的部分,不会产生冲突,可以直接将两部分合并。

总结:上面各种情况的本质都是,当前文件与合并文件不一致,因此不论哪种情况其解决冲突的方法是一样的。

3. 解决冲突
远程模拟场景:

双击Hello文件 —》进入文件内部

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7Ho71Wg-1691719294431)(E:\PRD\Images\image-20230809113045178.png)]

点击编辑 —》模拟代码冲突场景

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ulUosCzK-1691719294432)(E:\PRD\Images\image-20230809113122613.png)]
新增两行代码用于模拟冲突问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6zCbNCcf-1691719294432)(E:\PRD\Images\image-20230809113459255.png)]

提交信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dMqhhskY-1691719294432)(E:\PRD\Images\image-20230809114154687.png)]

选择分支 —》点击提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ivCP4q2F-1691719294432)(E:\PRD\Images\image-20230809114243669.png)]

可以看到是刚刚提交的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QSpP3HCd-1691719294433)(E:\PRD\Images\image-20230809114321405.png)]

本地模拟情景:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZAaiF4g-1691719294433)(E:\PRD\Images\image-20230809114714399.png)]

解决代码冲突:
  1. 现将本地更新的代码提交到本地仓库中:git add —》git commit '提交的信息'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYcz5baA-1691719294433)(E:\PRD\Images\image-20230809115041729.png)]

提交到本地仓库成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-34ihD3Bv-1691719294433)(E:\PRD\Images\image-20230809115136295.png)]

  1. 进行代码拉取(Pull)

先将.idea和out文件删除,因为我们并没有将它们进行版本控制,它只是我们本地的配置,有可能会报拉取上面的错误,如下所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNTZzSFt-1691719294434)(E:\PRD\Images\image-20230809115506462.png)]

选择分支 —》拉取

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Je85eY4W-1691719294434)(E:\PRD\Images\image-20230809115720095.png)]

进行合并,有三种情况:

  1. 第一种:以我本地仓库的代码为准
  2. 第二种:以远程仓库代码为准
  3. 第三种:手动合并

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cfPmlygG-1691719294434)(E:\PRD\Images\image-20230809133935364.png)]

一般都是通过跟团队另一个更改本文件的小伙伴一起沟通进行手动合并,以免误删别人代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gN1lq4XG-1691719294435)(E:\PRD\Images\image-20230809134423280.png)]

一般解决冲突我们都是选择merge

4. 关于冲突的个人心得

多人协作开发的时候,如果出现了你没有改过的文件跟你冲突了,一定要去找到当事者,说清楚是如何冲突的;

然后协商解决,千万不要擅自拉别的分支去试图解决冲突,或找文件覆盖,更或者以自己的文件为准.

同时记住,解决了之后,要addcommit 最后push.为保证万无一失,最后在冲突都解决之后,重启项目;

保证至少不会有立即奔溃的现象发生.然后才去提交,push.

提交的时候,一定要保持清醒,先搞清楚自己要提交的文件之间的关系,然后再提交,这样才不会有文件缺失的问题,造成奔溃.

如果任务比较多,又开了多个分支,分别进行开发,再次强调,一定要清楚自己在各个分支上做了什么,自己要提交的是什么.最好是能做个详细的笔记,没有把握宁愿不要去提交到生产服务器.

提交代码的时候不要走神,因为这是一个神圣的时刻!

至此我们的Git的使用就完成

8.4 使用Git命令进行代码更新

8.4.1 先根据8.3.3模拟项目成员向仓库推送代码
8.4.2 新建文件夹
1. 新建文件夹 —》右击 —》选择 Git Bash Here

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KomrRu2O-1691719294435)(E:\PRD\Images\image-20230810095330896.png)]

2. 在本地文件夹中初始化Git仓库
git init

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZlzGNRug-1691719294436)(E:\PRD\Images\image-20230810114344155.png)]

3. 克隆一个远程仓库到本地
git clone <repository-url> <自定义名称>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yWaT9hTD-1691719294436)(E:\PRD\Images\image-20230810154936069.png)]

可以看到是需要凭证认证的,这是我们自己设置的,只有通过凭证认证才可以进行后续的操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmQ7pykN-1691719294436)(E:\PRD\Images\image-20230810154619713.png)]

进行认证之后才能对远程仓库进行操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lWJDrAI4-1691719294437)(E:\PRD\Images\image-20230810115321926.png)]

可以看到文件夹下面多了一个文件夹(Git_Test)这个就是我们刚才创建的,点进去查看就是我们Git仓库上面的代码,接下来我们就可以对他进行版本控制了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSxeE3gc-1691719294437)(E:\PRD\Images\image-20230810115442355.png)]

4. 将文件添加到暂存区
  1. 在 Git_Test 文件夹中重新打开Git工具(根据自己的文件夹路径显示进行对应操作)

  2. 输入 vim Hello.java 对 Hello.java这个类进行编辑,按i、o可以进行编辑

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zeuKfrZ7-1691719294437)(E:\PRD\Images\image-20230810140820924.png)]

  1. 在测试类中添加一行代码,用于演示效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WRzhnTfO-1691719294438)(E:\PRD\Images\image-20230810140726338.png)]

按退出键(Esc)后 输入 :wq(保存并退出)

  1. 将文件添加到暂存区

    git add . 主要用于添加当前目录下的修改和新添加的文件到暂存区,而不包括删除的文件。

    git add --all git add -A 则会添加当前目录及其子目录下的所有修改、新增和删除的文件到暂存区。使用哪种命令取决于你想要达到的效果和需要添加到暂存区的文件类型。

    <file> 参数可以是单个文件的路径,也可以是使用通配符指定的多个文件,多个文件使用空格隔开

将代码添加到Git仓库的暂存区: git add <file>
添加所有文件: git add . (add后面有个点)git add -Agit add --all

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xf3LGQiP-1691719294438)(E:\PRD\Images\image-20230810140914350.png)]

  1. 输入 vim Test.txt 对 Test.txt这个文件进行编辑 ,按i、o可以进行编辑

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AbWtmqi-1691719294438)(E:\PRD\Images\image-20230810144505636.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJAG1fEU-1691719294439)(E:\PRD\Images\image-20230810144711507.png)]

按退出键(Esc)后 输入 :wq(保存并退出)

  1. 输入 git status 查看提交状态

Changes to be committed: 表示在工作区和暂存区都存在的file

Untracked files: 表示在工作区才有的文件,没有添加到暂存区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BrctF5df-1691719294439)(E:\PRD\Images\image-20230810144850916.png)]

5. 提交代码到本地仓库
  1. 先了解语法
语法: git commit [-m <message>] [--amend] [--no-edit] [--allow-empty]
  • -m <message>:指定提交的消息。消息应该是有意义的、明确描述本次提交所做更改的简短文本。例如:git commit -m "Fix a bug"
  • --amend:用于修正最后一次提交。通过该选项可以修改上一次提交的消息或者添加/移除文件到上一次提交中,不会生成新的commit-id,通常用于上一次提交版本进行修改,进行合并。
  • --no-edit:用于在修改最后一次提交时,保持原提交的消息不变而不打开文本编辑器。
  • --allow-empty:允许创建一个空的提交,即没有实际更改内容的提交。这在某些情况下可能会有用。
  • -am: 提交跟踪过的文件,相当于直接跳过add环节,-am = add + commit

注意:这个内容必须填写,不然提交不了,在执行 git commit 前,需要确保已使用 git add 命令将要提交的文件添加到暂存区中。否则,git commit 将无法成功进行提交。

  1. 进行代码提交到本地仓库

    可以看到生成了 commit-id 证明提交成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PU4A0Yea-1691719294439)(E:\PRD\Images\image-20230810152928880.png)]

6. 进行远程仓库代码拉取

由于我们克隆下来的是最新的版本,这里我们就不需要拉取了,不过还是演示一下吧

注意:每次进行代码推送的时候我们都要拉取最新的代码进行推送,不然版本不一致会出现很多问题

远程仓库代码拉取命令: git pull

输入 git pull 进行最新版本代码拉取

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFPzXSx5-1691719294439)(E:\PRD\Images\image-20230810153837782.png)]

显示 Already up to date. 证明我们的版本是最新的

7. 进行代码推送
git push -u origin master

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tZJiMN7L-1691719294440)(E:\PRD\Images\image-20230810155500086.png)]

推送成功

8.5 Idea分支

1. 新建分支
创建分支命令: git branch <branch-name>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnC1Ys7x-1691719294440)(E:\PRD\Images\image-20230809135305425.png)]

刚开始新建的分支内容与主分支是一致的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jce0xYHx-1691719294440)(E:\PRD\Images\image-20230809135446883.png)]

2. Idea查看分支
查看本地分支命令: git branch
查看远程分支命令: git branch -r

在Idea右下角,你可以看到你当前所在的分支,带着[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DefSa9qH-1691719294441)(E:\PRD\Images\8A824FF1.png)]符号的就是主分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1mYr7Yum-1691719294441)(E:\PRD\Images\image-20230809141222192.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iM2192Ts-1691719294441)(E:\PRD\Images\image-20230809141203380.png)]

3. 推送分支到远程库
签出分支命令: git checkout <branch_name>
推送分支到远程仓库命令: git push origin <branch_name>

选择项目Push:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6wwHxFB-1691719294441)(E:\PRD\Images\image-20230809142833993.png)]

推送完成后,可在远程库查看到刚推送的分支:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yvQbLxCh-1691719294442)(E:\PRD\Images\image-20230809145008440.png)]

4. 分支合并
合并分支命令: git merge <branch-name>

先分别往两个分支里面添加一些内容,使它们的内容不同,然后更新到仓库,就可以进行分支合并了,提交到仓库我之前已经讲过了,这里就不做赘述了。

注意:如果要分支合并的话,先把分支切换到主分支上进行合并

主分支代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUXkKqCp-1691719294442)(E:\PRD\Images\image-20230809150839112.png)]

测试分支代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I8VD1PVC-1691719294442)(E:\PRD\Images\image-20230809150620900.png)]

代码编写完记得提交到本地仓库,然后签出到主分支进行代码合并

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52gQCHx5-1691719294443)(E:\PRD\Images\image-20230809150225185.png)]

点击智能合并

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n9o0VfkO-1691719294443)(E:\PRD\Images\image-20230809151128962.png)]

选择手动合并,这时候应该是你和你的小伙伴用到了同一块代码了,记得和小伙伴商量如何修改,修改之前一定要记得备份。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CY3dZZ2U-1691719294443)(E:\PRD\Images\image-20230809151313998.png)]

进行手动合并

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pJD0R1eF-1691719294443)(E:\PRD\Images\image-20230809151723998.png)]

最终结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCQZiWLc-1691719294444)(E:\PRD\Images\image-20230809151802096.png)]

5. 删除分支
删除分支命令: git branch -d <branch-name>
强制删除分支命令: git branch -D <branch-name>
删除远程仓库分支命令: git push origin --delete <branch-name>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrv9WlHG-1691719294444)(E:\PRD\Images\image-20230809152022687.png)]

查看分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ewBUTUo-1691719294444)(E:\PRD\Images\image-20230809152054608.png)]

6. 其他操作分支命令
重命名分支: git branch -m <old-branch-name> <new-branch-name>
查看分支合并状态: git branch --merged
查看已经合并到当前分支的分支: git branch --no-merged
切换分支: git checkout <branch-name> 或  Git 版本(2.23+): git switch <branch-name>
创建并切换到新分支: git checkout -b <new-branch-name>  或  Git 版本(2.23+): git switch -c <new-branch-name>

8.6、如何将本地仓库代码强制推送到远程仓库

由于我们碰到相同的需求,恰好网上也有相似的项目,于是我们从别处将代码拉取到我们的本地,这时我们建立远程仓库,那么我们应该如何将代码放到远程仓库上面呢?由于这个项目我们是从别处拉取的项目,所以本地的代码版本和远程仓库版本肯定是不一致的,用常规的办法肯定行不通,那么应该怎样将代码推送到远程仓库呢?这时候我们就要进行代码强制推送了,因为远程仓库刚建立,里面啥都没有,肯定以我们本地的代码为准,所以直接将我们的本地仓库的代码直接推送到远程仓库就可以了,那么应该如何操作呢?接下来我就教大家如何进行强制推送本地仓库的代码到远程仓库。

1. 先与远程仓库建立连接

在项目根路径下面打开git bash here窗口
然后使用 git remote add origin <remote_repo_url> 命令是本地仓库与远程仓库建立连接
在这里插入图片描述

2. 强制推送

然后使用git push -f <远程仓库名称> <本地分支名称>:<远程分支名称>命令将本地分支强制推送到远程仓库。
在这里插入图片描述

3. 查看是否推送成功

如下所示就是强制推送成功
在这里插入图片描述
再看一下远程仓库是否有文件
在这里插入图片描述

强制推送成功

8.7、更多Git命令

1. 配置相关命令
  1. git config --global user.name "<Your Name>":设置全局用户名,这个就是代码提交的用户名。
  2. git config --global user.email "<your_email@example.com>":设置全局用户邮箱。
  3. git config --global core.editor "<editor>":设置全局文本编辑器,用于撰写提交说明。
  4. git config --global color.ui true:启用全局彩色输出,使 Git 命令输出更具可读性。
  5. git config --global alias.<alias-name> <command>:设置自定义的 Git 别名,用于简化命令的使用。
    例如:git config --global alias.s status 会将 git status 命令简化为 git s

你可以使用 git config --global --list 命令来查看当前的全局配置信息。

2. 更多命令
  1. git init:在当前目录初始化一个新的Git仓库。
  2. git clone <repository>:克隆(下载)远程仓库到本地。
  3. git add <file>:将文件添加到暂存区,准备提交。
  4. git commit -m "<message>":将暂存区中的改动提交到本地仓库,可以附带一条注释。
  5. git status:查看当前仓库的状态,包括被修改但未提交的文件、新文件等。
  6. git log:查看提交历史记录。
  7. git branch:列出当前仓库的分支列表。
  8. git checkout <branch>:切换到指定的分支。
  9. git merge <branch>:将指定分支的改动合并到当前分支。
  10. git pull:从远程仓库拉取最新的代码更新到本地分支。
  11. git push:将本地分支的修改推送到远程仓库。
  12. git push -f <远程仓库名称> <本地分支名称>:<远程分支名称>:将本地分支强制推送到远程仓库。
  13. git diff:查看当前工作区与暂存区的差异。
  14. git diff --cached:查看暂存区与最近一次提交的差异。
  15. git diff <commit> <commit>:比较两个提交之间的差异。
  16. git reset <file>:将文件从暂存区移出,取消暂存。
  17. git reset <commit>:将当前分支的HEAD指针移动到指定的提交。
  18. git revert <commit>:撤销指定的提交,生成一个新的提交来反转变更。
  19. git stash:将当前的工作区变更暂存起来,切换到干净的工作区。
  20. git stash pop:恢复最近一次stash的变更并将其从stash堆栈中移除。
  21. git tag <tagname>:创建一个标签,用于标记重要的提交。
  22. git remote add <name> <url>:用于将本地仓库与远程仓库建立关联
  23. git remote remove <name>:移除已关联的远程仓库。
  24. git remote -v:查看当前仓库关联的远程仓库信息。
  25. git remote show <remote>:显示指定远程仓库的详细信息,包括分支跟踪等。
  26. git revert --no-commit <commit>:撤销指定的提交,并保留撤销操作的改动,但不生成新的提交。
  27. git rebase -i <commit>:以交互式模式重新设置基点,允许合并、修改或删除提交。
  28. git fetch:从远程仓库下载最新的代码更新,但不会自动合并到当前分支。
  29. git cherry-pick <commit>:选择指定的提交,并将其应用到当前分支。
  30. git rebase <branch>:将当前分支的提交基点移动到指定分支的末端。
  31. git clean -n:显示将要被删除的未被跟踪的文件,但不会真正删除它们。
  32. git bisect:用于二分查找来定位导致问题的代码提交。
  33. git blame <file>:逐行显示指定文件的每一行是谁做的修改,并显示相应的提交信息。
  34. git log --graph:以图形化方式展示提交历史。
  35. git submodule:用于管理和操作Git仓库中的子模块。
3. 查看更多命令

git help: 通过在命令行中输入git help,可以获取关于Git命令的详细说明和用法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值