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.0
、v2.0
等。通过标签可以方便地查看和切换到项目的某个历史版本。创建标签的命令是git tag <标签名>
,还可以添加-a
参数创建带附注的标签,并使用-m
参数添加标签说明。
三、Git 使用方式
(一)安装与配置
- 安装:根据操作系统下载对应的 Git 安装包,然后按照安装向导进行安装。例如,在 Windows 系统上,可以从 Git 官方网站(Git)下载安装包;在 Linux 系统上,可以使用包管理器进行安装,如在 Ubuntu 系统上使用
sudo apt-get install git
命令安装。 - 配置:安装完成后,需要配置用户信息,以便在提交代码时标识身份。打开命令行工具,执行以下命令:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
--global
参数表示对当前用户的所有仓库都生效,如果只想对某个特定仓库进行配置,则去掉该参数,在该仓库目录下执行配置命令。
(二)基本操作流程
以一个新建项目为例,以下是使用 Git 进行版本控制的基本操作步骤:
- 初始化仓库:在项目目录下,打开命令行工具,执行
git init
命令,将当前目录初始化为一个 Git 仓库。此时会在项目目录下生成一个隐藏的.git
文件夹。 - 添加文件到暂存区:将项目中的文件添加到暂存区,暂存区是一个临时区域,用于暂存即将提交的文件更改。可以使用
git add <文件名>
命令添加单个文件,或使用git add.
命令添加当前目录下的所有文件。例如,项目中有一个main.cpp
文件,要将其添加到暂存区,执行git add main.cpp
。 - 提交更改:将暂存区的文件更改提交到本地仓库,执行
git commit -m "提交信息"
命令,其中-m
后面的双引号内填写本次提交的简要说明,如 “初始化项目,添加 main.cpp 文件”。 - 连接远程仓库:如果需要与远程仓库进行协作,需要先将远程仓库添加到本地仓库的配置中。假设远程仓库的 URL 为
https://github.com/user/repo.git
,执行git remote add origin https://github.com/user/repo.git
命令,将远程仓库命名为origin
(这是一个常用的默认名称)。 - 推送更改到远程仓库:执行
git push -u origin master
(如果主分支是main
,则为git push -u origin main
)命令,将本地仓库的master
(或main
)分支推送到远程仓库的master
(或main
)分支。-u
参数会将本地分支与远程分支建立追踪关系,后续推送时可以直接使用git push
。
(三)分支管理操作
- 查看分支:执行
git branch
命令,列出当前仓库的所有分支,当前所在分支前面会有一个星号*
标识。 - 创建新分支:执行
git branch <分支名>
命令创建一个新分支,例如git branch feature-1
创建一个名为feature-1
的新分支。 - 切换分支:可以使用
git checkout <分支名>
命令切换到指定分支,例如git checkout feature-1
切换到feature-1
分支;从 Git 2.23 + 版本开始,也可以使用git switch <分支名>
命令进行切换。 - 合并分支:假设在
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
命令。
(六)撤销更改
- 撤销暂存区的更改:如果只是想取消暂存区中文件的更改,将其恢复到工作区的状态,可以使用
git reset <文件名>
命令;如果要取消暂存区中所有文件的更改,则使用git reset.
命令。 - 撤销已提交的更改:如果想要撤销最近的一次提交,可以使用
git reset HEAD~1
命令,这会将 HEAD 指针回退到上一次提交,同时工作区和暂存区的内容也会相应改变。如果希望保留工作区的更改,只撤销提交,可以使用git revert <commit id>
命令,该命令会创建一个新的提交来撤销指定提交的更改。
四、Git 可视化工具
除了命令行操作,也有许多可视化工具可以帮助使用 Git,它们提供了图形界面,使操作更加直观:
- GitKraken:功能强大,支持跨平台(Windows、Mac、Linux),界面简洁美观,方便进行分支管理、合并、解决冲突等操作,还能直观地查看提交历史和文件差异。
- SourceTree:由 Atlassian 开发,同样支持多平台,它简化了 Git 的操作流程,提供了丰富的可视化功能,如可视化的提交历史、分支图等,适合初学者快速上手 Git 操作。
五、思维导图示例
若看不清晰,请私信我;