当前位置: 首页 > news >正文

Git 的基本概念和使用方式(附有思维导图)

一、Git 简介

Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 在 2005 年为帮助管理 Linux 内核开发版本而开发 。与集中式版本控制系统(如 SVN)不同,在分布式系统中,每个开发者的本地机器都拥有一个完整的 Git 仓库副本,包括代码和版本信息,这使得开发者在没有网络连接的情况下也能进行提交等操作,后续再同步到远程仓库。而集中式版本控制系统中,开发者的本地只保存工作副本,版本历史记录等都存储在中央服务器上,离开服务器很多操作无法进行。

二、Git 基本概念

(一)仓库(Repository)

仓库是 Git 存储项目所有文件和版本历史记录的地方,可以看作是项目的文件夹。它分为本地仓库和远程仓库:

  • 本地仓库:在开发者本地计算机上的仓库,通过git init命令可以在现有项目目录中初始化一个新的本地仓库,初始化后会在该目录下生成一个隐藏的.git文件夹,里面包含了所有必要的仓库文件。
  • 远程仓库:存储在云端或其他计算机上的仓库,如 GitHub、GitLab 等平台都提供远程仓库托管服务。远程仓库用于团队成员之间共享代码、协作开发,以及备份代码。每个远程仓库都有一个唯一的 URL,方便开发者克隆到本地或与之进行数据交互。

(二)提交(Commit)

提交是将文件的变化记录到 Git 仓库中的操作。每次提交都会创建一个包含唯一标识符(commit id,通常是一个很长的哈希值)的快照,这个快照记录了提交时项目中所有文件的状态。提交时还需要添加提交信息,用于简要描述本次提交所做的更改,方便后续查看历史记录时理解更改内容。

(三)分支(Branch)

分支是仓库中不同版本的副本,它允许开发者在不影响主分支(如 master)的情况下,独立地进行开发工作。例如,在开发新功能时,可以创建一个新分支,在该分支上编写、测试代码,完成后再合并到主分支。这样可以有效地管理多个开发任务,防止不同功能开发过程中的代码冲突。默认情况下,新创建的仓库有一个名为master的主分支。可以使用git branch命令查看当前仓库的分支情况,git branch <分支名>命令创建新分支。

(四)主分支(Master)

主分支是 Git 中默认的分支,通常用于存储生产环境中的稳定代码。在很多项目中,主分支上的代码是经过严格测试和验证的,可直接用于发布上线。不过现在也有很多项目使用main分支作为主分支。

(五)克隆(Clone)

克隆是从远程仓库中复制整个仓库到本地的操作。通过git clone <远程仓库URL>命令,开发者可以将远程仓库完整地下载到本地计算机,包括所有的文件、分支以及版本历史记录。克隆后,本地就有了一个可以独立进行开发的副本。

(六)拉取(Pull)

拉取是从远程仓库获取最新代码,并将其合并到本地仓库当前分支的操作。当团队中其他成员对远程仓库进行了修改,本地开发者可以使用git pull命令将这些修改拉取到本地,保持本地代码与远程仓库同步。git pull命令相当于先执行git fetch(从远程仓库获取最新的提交对象到本地仓库,但不自动合并),再执行git merge(将获取到的分支合并到当前分支)。

(七)推送(Push)

推送是将本地仓库中已提交的更改上传到远程仓库的操作。开发者在本地完成代码修改、提交后,通过git push命令将本地分支的更改推送到远程仓库,这样其他团队成员才能看到这些修改。推送时需要注意权限设置,以及本地分支和远程分支的对应关系。

(八)合并(Merge)

合并是将一个分支的修改整合到另一个分支的操作。当在一个分支上完成新功能开发或代码修复后,通常需要将该分支合并到主分支或其他目标分支。例如,在功能分支上开发完新功能后,切换到主分支,然后使用git merge <功能分支名>命令将功能分支的更改合并到主分支。如果合并过程中出现冲突(即不同分支对同一文件的同一部分进行了不同的修改),则需要手动解决冲突后再继续合并操作。

(九)冲突(Conflict)

当 Git 无法自动合并两个不同分支的修改时,就会产生冲突。例如,两个开发者同时修改了同一个文件的同一行内容,在合并分支时 Git 就无法确定应该保留哪个版本,这时就需要开发者手动编辑冲突文件,选择保留哪些更改,删除哪些冲突标记,然后再提交以完成合并。

(十)标签(Tag)

标签是对某个特定版本的引用,通常用于标记项目的发布版本,如v1.0v2.0等。通过标签可以方便地查看和切换到项目的某个历史版本。创建标签的命令是git tag <标签名>,还可以添加-a参数创建带附注的标签,并使用-m参数添加标签说明。

三、Git 使用方式

(一)安装与配置

  1. 安装:根据操作系统下载对应的 Git 安装包,然后按照安装向导进行安装。例如,在 Windows 系统上,可以从 Git 官方网站(Git)下载安装包;在 Linux 系统上,可以使用包管理器进行安装,如在 Ubuntu 系统上使用sudo apt-get install git命令安装。
  2. 配置:安装完成后,需要配置用户信息,以便在提交代码时标识身份。打开命令行工具,执行以下命令:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

--global参数表示对当前用户的所有仓库都生效,如果只想对某个特定仓库进行配置,则去掉该参数,在该仓库目录下执行配置命令。

(二)基本操作流程

以一个新建项目为例,以下是使用 Git 进行版本控制的基本操作步骤:

  1. 初始化仓库:在项目目录下,打开命令行工具,执行git init命令,将当前目录初始化为一个 Git 仓库。此时会在项目目录下生成一个隐藏的.git文件夹。
  2. 添加文件到暂存区:将项目中的文件添加到暂存区,暂存区是一个临时区域,用于暂存即将提交的文件更改。可以使用git add <文件名>命令添加单个文件,或使用git add.命令添加当前目录下的所有文件。例如,项目中有一个main.cpp文件,要将其添加到暂存区,执行git add main.cpp
  3. 提交更改:将暂存区的文件更改提交到本地仓库,执行git commit -m "提交信息"命令,其中-m后面的双引号内填写本次提交的简要说明,如 “初始化项目,添加 main.cpp 文件”。
  4. 连接远程仓库:如果需要与远程仓库进行协作,需要先将远程仓库添加到本地仓库的配置中。假设远程仓库的 URL 为https://github.com/user/repo.git,执行git remote add origin https://github.com/user/repo.git命令,将远程仓库命名为origin(这是一个常用的默认名称)。
  5. 推送更改到远程仓库:执行git push -u origin master(如果主分支是main,则为git push -u origin main)命令,将本地仓库的master(或main)分支推送到远程仓库的master(或main)分支。-u参数会将本地分支与远程分支建立追踪关系,后续推送时可以直接使用git push

(三)分支管理操作

  1. 查看分支:执行git branch命令,列出当前仓库的所有分支,当前所在分支前面会有一个星号*标识。
  2. 创建新分支:执行git branch <分支名>命令创建一个新分支,例如git branch feature-1创建一个名为feature-1的新分支。
  3. 切换分支:可以使用git checkout <分支名>命令切换到指定分支,例如git checkout feature-1切换到feature-1分支;从 Git 2.23 + 版本开始,也可以使用git switch <分支名>命令进行切换。
  4. 合并分支:假设在feature-1分支上完成了功能开发,要将其合并到main分支,先切换到main分支,即git checkout main(或git switch main),然后执行git merge feature-1命令将feature-1分支的更改合并到main分支。

(四)解决冲突

当合并分支出现冲突时,Git 会在冲突文件中标记出冲突的部分,格式如下:

plaintext

<<<<<<< HEAD
// 主分支上的代码内容
=======
// 待合并分支上的代码内容
>>>>>>> feature-1

开发者需要手动编辑文件,删除冲突标记<<<<<<< HEAD=======>>>>>>> feature-1,并选择保留合适的代码内容,然后保存文件。接着,再次执行git add <冲突文件名>将文件重新添加到暂存区,最后执行git commit -m "解决冲突并完成合并"完成合并操作。

(五)查看历史记录

使用git log命令可以查看提交历史记录,默认会显示每次提交的详细信息,包括提交的哈希值、作者、日期、提交信息等。如果希望输出更加简洁,每行只显示一个提交的简短信息,可以使用git log --oneline命令。

(六)撤销更改

  1. 撤销暂存区的更改:如果只是想取消暂存区中文件的更改,将其恢复到工作区的状态,可以使用git reset <文件名>命令;如果要取消暂存区中所有文件的更改,则使用git reset.命令。
  2. 撤销已提交的更改:如果想要撤销最近的一次提交,可以使用git reset HEAD~1命令,这会将 HEAD 指针回退到上一次提交,同时工作区和暂存区的内容也会相应改变。如果希望保留工作区的更改,只撤销提交,可以使用git revert <commit id>命令,该命令会创建一个新的提交来撤销指定提交的更改。

四、Git 可视化工具

除了命令行操作,也有许多可视化工具可以帮助使用 Git,它们提供了图形界面,使操作更加直观:

  • GitKraken:功能强大,支持跨平台(Windows、Mac、Linux),界面简洁美观,方便进行分支管理、合并、解决冲突等操作,还能直观地查看提交历史和文件差异。
  • SourceTree:由 Atlassian 开发,同样支持多平台,它简化了 Git 的操作流程,提供了丰富的可视化功能,如可视化的提交历史、分支图等,适合初学者快速上手 Git 操作。

五、思维导图示例

若看不清晰,请私信我;

相关文章:

  • 数1的个数(信息学奥赛一本通-1095)
  • 在芯片设计的后端流程中,通过metal修timing是什么意思,怎么实施。举个timing违例说明一下
  • java设计模式之适配器模式
  • 2011-2020年 全国省市县-数字普惠金融指数数字经济指数绿色金融指数县域数字乡村指数
  • Ollama本地部署deepseek-r1蒸馏版
  • eNSP中路由器的CON/AUX接口、GE Combo接口、Mini USB接口、USB接口、WAN侧uplink接口、FE接口、GE接口介绍
  • jmeter-AES加密
  • 【Python】PyQt5在PyCharm的配置与应用
  • E1-110.完美走位(滑动窗口)
  • C#带有设备仿真功能串口调试助手
  • 【AIGC】计算机视觉-YOLO系列家族
  • 今天你学C++了吗?——C++中的继承
  • 聚水潭数据集成到MySQL的高效方法
  • Git使用(一)--如何在 Windows 上安装 Git:详细步骤指南
  • JVM学习-类文件结构 类加载
  • 2025年渗透测试面试题总结-奇安信安全工程师(题目+回答)
  • 蓝桥杯备考:unordered_map用法之阅读理解
  • IIS EXPRESS 虚拟目录经验谈!
  • mysql 数据库部署
  • 故障诊断——neo4j入门
  • 关于“十五五”,在上海召开的这场座谈会释放最新信号
  • 李乐成任工业和信息化部部长
  • 融创服务全面退出彰泰服务集团:约8.26亿元出售广西彰泰融创智慧80%股权
  • 广东省副省长刘红兵跨省任湖南省委常委、宣传部部长
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日
  • 《九龙城寨之围城》斩获香港金像奖九项大奖,包括最佳影片