Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践 | 豆包MarsCode AI刷题

87 阅读7分钟

前言

本篇文章从个人开发视角和团队协作视角分别讲述git在不同视角下是如何使用的,例如对于个人开发者而言冲突的情况基本不会出现,但是在团队协作中这是家常便饭等情况。

git介绍

Git 是一个开源的分布式版本控制系统,用于高效地跟踪文件的修改历史、协调多人协作开发以及方便地进行项目版本管理等工作。它最初由林纳斯・托瓦兹(Linus Torvalds)开发,也就是 Linux 内核的创始人,目的是为了更好地管理 Linux 内核代码的开发,如今已被广泛应用于各类软件开发项目以及其他涉及文件版本管理的领域。

git虽然在团队协作上起着非常大的作用,但是即使是在个人开发者的开发流程中,git同样也是对于项目版本控制及备份的好帮手。

所以在讲述其在团队协作中的作用前,先以一个普通个人开发者的视角去讲述git的强大之处吧。

首先在讲述之前,需要理解以下git的知识点。

  1. 工作区(Working Directory) :这是我们在电脑上实际看到的项目目录,也就是存放代码或者其他文件的地方,在这里可以进行文件的创建、编辑、删除等操作。例如你正在编写一个 Python 项目,这个项目所在的文件夹就是工作区。
  2. 暂存区(Staging Area) :又被称作索引(Index),它就像是一个中转站,用于临时存放你想要提交到仓库的文件修改内容。当你在工作区对文件做了修改后,通过git add命令把这些修改添加到暂存区,告诉 Git 哪些修改是你打算纳入下一次版本记录中的。
  3. 本地仓库(Local Repository) :是在本地电脑上保存项目完整版本历史的地方,通过git commit命令可以把暂存区的内容提交到本地仓库,这样就形成了一个版本记录,每个版本都有对应的唯一标识(哈希值),便于后续查看和回溯等操作。
  4. 远程仓库(Remote Repository) :通常存放在远程服务器上,比如常见的 GitHub、GitLab、Bitbucket 等代码托管平台。它主要用于团队成员之间共享代码以及备份项目版本等,通过git push(将本地仓库内容推送到远程仓库)和git pull(从远程仓库拉取更新到本地仓库)等命令实现本地和远程仓库之间的交互。

个人开发

那么对于一个个人开发者而言,要使用git,那么就必须先创建一个本地或是远程的git仓库作为项目的存储仓库。

说到git,那么肯定会想到世界上著名的源代码仓库——GitHub

其就是一个非常著名的远程仓库,可以在github上先建好一个仓库,然后在创建完成后进行clone,当然顺带一提在此之前需要下载git软件并在github上配置好自己的ssh密钥,不过本文就不对此展开了,如果有感兴趣的朋友可以自行搜索相关内容并进行学习。

那么在clone完成后就可以使用上传命令 git push 进行上传了。

这样就可以将本地的项目使用git上传至远程仓库了。

接下来就是比较详细的一个流程。

添加文件到本地仓库

git add filename

这样就可以添加指定文件至暂存区了,当然如果想添加多个文件的话就可以在文件名后加一个空格然后继续写一个文件名这样添加多个文件。

不过一般在开发过程中,我们都直接使用 git add . 来将当前目录下的所有文件添加到暂存区。

那么并不是添加到暂存区就完事了,因为git是一个项目版本控制管理的,所以每次添加到暂存区都还需要对此次操作进行一次说明。例如 我 git add index.html 那么就得说明添加一个 index.html 的动作解释。 此时就得使用 git commit了。还是以 index.html 做例子,那么我就得写 git commit -m '添加了一个index.html,作用是XXXXX' ,这样的解释说明,那么在git的本地仓库中,这次的添加行为就有了对应的 行为解释 了。

上传至远程仓库

那么在上传至本地后就可以使用前面提及的 git push 进行上传了。

一般来说直接这样用就可以了,但如果是有多个分支的话得用 git push <远程仓库名称> <分支名> 来指定分支上传了,而如果不指定的话一般默认就是上传至 master 分支,也是默认分支。

团队协作

那么在团队协作中经常会涉及到一个冲突问题,这个时候就需要非常细致地进行排查以及沟通了。

当然团队协作和个人开发也不止有这个不同点,接下来也请我按开发顺序进行介绍吧

拉取代码

在团队协作中,一般来说当项目的一手创建者将代码上传至git后,其他人就会使用 git clone 来将远程代码拉取下来进行协同开发。

添加文件到本地仓库

这点和个人开发其实差不多,在每个团队成员完成了既定任务需要进行推送或备份时也会这么做。

在上传前

在进行上传前,可以先看一看当前项目在远程仓库的版本。即 git fetch,例如可以使用

git fetch origin 来查看当前远程仓库中所有分支的最新提交。还有一个经常和 fetch 命令配合使用的是

git log 其用于查看提交历史记录,展示每次提交的作者、时间、提交说明以及提交的哈希值等重要信息。但要查看远程分支的提交历史,首先需要通过 git fetch 把远程分支的最新版本信息拉取到本地(前面已介绍 git fetch 的操作),然后再通过指定远程分支名称来查看其对应的提交历史。

如果是想查看分支,那么可以使用 git branch -r 来查看当前远程仓库中所含有的各个分支。

可能会遇到的冲突问题

当出现代码冲突时,Git 会给出相应的提示信息,常见的情况如下:

  1. 在执行 git push:如果推送的分支与远程仓库中已有的代码存在冲突,Git 会拒绝推送,并提示类似 error: failed to push some refs to '<远程仓库地址>',告知你推送失败,需要先解决冲突后再尝试推送。
  2. 在执行 git pullgit merge:会提示存在冲突的文件以及冲突的具体位置等信息,例如会显示类似 CONFLICT (content): Merge conflict in <文件名>,告诉你哪个文件出现了内容上的冲突,方便你去定位处理。

这个时候就需要细致地去解决冲突了,如果解决失败了或是出现了别的问题,还可以回溯到之前的版本重新进行处理,这个时候就会用到 git reset 了,具体是 git reset <版本标识> 的方式来进行指定版本的回溯。

在解决了冲突并进行了push之后,可以在 git log 中看到 merge 字样,这就表明该项目发生过冲突,然后进行解决了。

项目同步

有时候发现了远程仓库更新了但本地不想重新clone时,就可以使用 git pull 将远程仓库的最新版本代码拉取到本地仓库中,当然在拉取过程中也可能会出现冲突问题。