Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

12 KiB

Git

Git的概念

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

三个区域的概念

  • 工作区 就是你平时存放项目代码的地方
  • 暂存区 用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • 仓库区 存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程git仓库了。

仓库的概念

Git 仓库(Repository)是一个包含项目所有历史版本、元数据和配置信息的目录。它本质上是一个隐藏的.git文件夹(位于项目根目录下),其中存储了:

  • 对象数据库:保存所有文件的内容快照、提交记录、分支信息等。
  • 引用(Refs):指向特定提交的指针,如分支(branches)、标签(tags)。
  • 配置文件:存储仓库的设置(如远程仓库地址、用户信息)。

节点的概念

在 Git 中,节点通常指的是版本控制系统中的提交对象(Commit),它是 Git 数据结构中的基本单元。每个提交节点代表项目历史中的一个版本快照,通过有向图的方式形成 Git 的提交历史。

分支的概念

分支(Branch) 是版本控制的核心机制之一,它允许你在不干扰主开发线的情况下,并行开发多个特性或修复 bug。

SourceTree

SourceTree的概念

SourceTree 是一款由 Atlassian 公司开发的免费 Git 图形化界面客户端,旨在帮助开发者更直观、高效地管理 Git 版本控制系统。它通过可视化界面简化了 Git 命令行操作,让复杂的版本控制流程(如分支管理、提交、合并、冲突解决等)变得更易操作,尤其适合 Git 新手或偏好图形化操作的用户。

仓库相关操作

创建本地仓库

点击Create,选中文件夹创建仓库

image-20250707164736795

打开本地仓库

点开上方资源管理器可以打开仓库

image-20250707205049305

克隆远程仓库

  1. 先创建远程仓库,点击上方加号创建仓库,取名为GitDemo

image-20250708082856548

  1. 复制https的链接

image-20250708082947454

  1. 点击soursetree的Clone,把复制的网址输入进去,并选择要克隆到本地的那个目录

image-20250708083410091

获取

从远程仓库下载所有本地仓库中不存在的提交(commits)和引用(refs),但不会自动合并到当前工作分支。如果需要合并,需要手动marge

git fetch

image-20250708085328450

当前还处于上次的分支没有合并

image-20250708085714440

如果需要合并需要自己手动marge

关联远程仓库

  1. 创建一个本地仓库

  2. 点击远端,添加一个远程仓库

image-20250710140922797

  1. 添加远程URl

image-20250710141037460

  1. 点击推送,把本地修改的推送到云端

image-20250710141125800

  1. 去远程仓库发现文件已经推送上去

image-20250710141159384

节点相关操作

提交

当在提交的时候要先拉取一下最新的代码,防止冲突

  1. 先在hello.txt里面添加hello weather,然后将其修改的文件暂存到暂存区git add

    image-20250708091951015

  2. 添加要提交的信息,勾上立即推送到变更到origin/master,相当于执行了git commit && git push

重置

git reset 的三种模式

  1. --soft 模式
  • 操作:仅移动 HEAD 指针,不改变暂存区和工作区。
  • 效果:提交被取消,但修改仍保留在暂存区(可直接重新提交)。
  1. --mixed 模式(默认)
  • 操作:移动 HEAD 指针,重置暂存区,但保留工作区。
  • 效果:提交被取消,修改回到工作区(需重新 git add
  1. --hard 模式
  • 操作:移动 HEAD 指针,重置暂存区和工作区。
  • 效果:彻底删除提交,工作区恢复到指定提交的状态(修改会丢失)

软合并为soft 混合合并为mixed 强行合并为hard

image-20250708100756494

  1. 当点击混合模式之后,本地仓库会回退到那次修改,但是文件还是存在,需要手动确实是否删除或者保留,我选择直接删除,本地只剩下number.txt,云端上面有两个文件

image-20250708101456398

image-20250708101555505

当前本地和云端的版本不一致,要强行把本地的推送到云端

image-20250708101839909

推送完会本地和云端会呈现一致

image-20250708101934246

回滚提交

右键要回滚的版本,选择回滚提交

image-20250708102637452

点击推送就能把云端的也回滚提交

image-20250708102849707

分支相关操作

新建分支

点击上方的分支就能创建一个分支

image-20250708103038424

切换分支

选择需要切换的分支,直接双击就能切换

合并分支

切换到master分支,选择上面的合并,选择需要合并的分支image-20250708103311599

image-20250708103337318

本地仓库也出现了dev-c.txt

image-20250708103406873

删除分支

右键要删除的分支,点击删除

image-20250708103454627

制造冲突

冲突大概就是,两个人修改了相同的一个文件,git不知道那个在前,那个在后,也不知道是否要删除某一处,所有就会发生冲突

  1. 先云端修改food.txt添加包子

image-20250709082307168

  1. 本地修改food.txt添加油条

image-20250709082358335

  1. 提交代码到云端显示提交不上去,推送被拒绝是因为远程仓库的master分支有本地仓库没有的更新。这一般是由于其他人向相同分支推送了新内容所导致的。

image-20250709083313272

  1. 先尝试拉去一下远端代码

image-20250709083423371

git帮我们标记出了,head是代表本地修改的,=====下面是远端修改的内容

image-20250709083501307

解决冲突

  1. 发现冲突,要先去看一下上面的提交id,可以找到这段代码是谁写的,去询问是谁,看代码怎么修改,这边演示以为我的代码为标准,删除远端的代码修改

image-20250709084649410

image-20250709084625933

  1. 去云端看看代码修改情况,发现和本地的一样

image-20250709084751683

其他

书写忽略文件

在sourcetree上面点击设置>高级>编辑

  • 忽略指定名称文件
//直接写出其名字
config.ini
secrets.json
  • 忽略以什么字符结尾的
//使用通配符
//忽略以.txt文件结尾的
*.txt
// 忽略所有 .log 文件
*.log
  • 忽略整个文件夹
//在文件夹后面加/
# 忽略 logs 目录及其所有内容
logs/
# 忽略 target 目录
target/

停止跟踪

通过修改.gitignore忽视某个文件但是发现这个文件还是会被踪,只对没有被git commit 过的文件有效,也就是说如果你的文件被commit过后你再修改gitignore,这个时候gitignore对这个文件是无效的,这个时候就需要取消对某个文件的跟踪。

添加一个log文件

image-20250711124736945

  1. 这时提交上去,然后添加一个忽略文件,但是修改文件,依然会出现

image-20250711130657767

image-20250711130722293

  1. 需要点击文件选择停止追踪

image-20250711131113752

创建补丁

创建补丁的原因

交给客户的版本是2.0版本的,随着公司的发展,项目已经到了3.0。
这时候客户提出了一个bug,我们需要对其进行修复。
因为客户所支付的款项只是到2.0版本的,我们不可能免费给客户升级到3.0版本。
这个时候就可以使用打补丁的方式来提交代码。

项目开发的时候要求一个页面一个代码分支,同时要求代码写完之后要求指定的人来review,
还要求不能向Git分支提交太多次代码,否则分支就会很乱。
这个时候,就可以让开发者将开发完的代码先提交到本地Git仓库,然后将所有的改动都打一个补丁,将补丁发给代码review者。代码review者,将补丁应用到本地的review分支进行代码review。

  1. 先将修改的代码,暂存到本地,不提交云端,这里我修改了两处

image-20250709091320725

  1. 点击需要打补丁的节点 选择创建补丁

image-20250709091428330

  1. 点击创建补丁

image-20250709091529159

应用补丁

  1. 将分支切换到dev分支
  2. 点击上方的操作>应用补丁并选择补丁的位置

image-20250709092357896

  1. 可以看到补丁已经打到dev分支了,暂存在本地仓库

image-20250709092307819

贮藏

当你现在需要帮同部门的人去改bug,但是自己的还没写完,也可能不想去动自己的本地代码,可以使用贮藏功能

ps 贮藏只会去储藏修改的和被git管理的文件

  1. 点击上方的贮藏,添加一个说明语句

image-20250711133954769

  1. 发现工作区间是干净的的,贮藏下面多了一个分支

image-20250711134109661

  1. 当应用贮藏的时候会发现更改的和贮藏的都会保留

image-20250711134306193

丢弃

如上图所示,当需要去除之前写的代码,需要点击丢弃,这里丢弃写的C文件

image-20250711134419976

丢弃完发现暂存区只剩下C文件

image-20250711134517450

移除

创建标签

在我们开发迭代过程中,会遇到这种情况,当前的版本是1.0.0。但需要找到版本号0.5.0的版本提交时,可能因为时间久远,不能快速定位到当时V0.5.0的提交记录,这个时候我们就需要进行标签管理了。比如我在发布1.0.0时,只需要在这个版本最后一个提交记录上打上标签,

image-20250709094132166

image-20250709094033231

删除标签

在左侧标签页可以选择删除标签

image-20250709094147028