入职前你需要知道的git操作大指南

在工作中,我们必不可少需要掌握的就是git的一些操作了,那么git究竟是什么东西呢?

git,打个比喻来说,相当于游戏的存档功能。我们把每一次的代码修改保存下来,方便我们进行代码的回溯和发布。而github和gitlab这样的软件,就相当于一种云存档,我们会将我们已经开发完成的功能分支推送到github上,当代码通过审查后,合并到主分支(一般是main/develop分支),最后去上线主分支的代码。这样不仅可以让我们无论处于何地都能拉取到代码,而且最重要的是它在团队协作中起到的作用。

1. git 配置

当我们去官网将安装下来后,首先可以使用git -v命令查看是否安装成功。

当能够显示出版本号时就说明安装成功了,接下来我们应该做的就是git的一些配置。

git提供了一个git config的命令,用来配置或读取相应的工作环境变量。我们需要配置个人的用户名称和电子邮件地址(一般设置为自己github或者gitlab的用户名与邮箱地址),这是为了在每次提交代码时记录提交者的信息:

js 复制代码
git config --global user.name "xxxxxx"
git config --global user.email [email protected]

一般来说的话,配好这两个就够用了,我们可以使用git config --list命令来查看现在的git配置。

2. git 工作流程

那么一般在真实的工作环境中是怎么使用git的呢?

我简单总结了一下,大概是以下流程:

假如主分支是develop,然后使用git checkout -b feature/user-login创建了一个分支,然后我们进行开发,完成一个小部分后,git add 和git commit,一般频繁commit比较好,然后下班前使用git push -u origin feature/user-login提交到远程的feature/user-login分支。几天后,这个feature/user-login功能分支开发完毕后,通过MR或PR进行代码审查,审查通过后一般是由主管来将这条功能分支合并到主分支。然后合并完成后我们再把这条功能分支远程和本地删除

其中有几个比较重要的小点:

  1. 我们不会直接在主分支上进行开发,而是在主分支上创建一个自己的功能分支,在这条功能分支上进行开发,最后代码通过审查后,再合并到主分支上。这是为了保证主分支的整洁与减少冲突,当所有人都在主分支上进行开发时,代码将会变得非常混乱。

  2. 原子化提交,每次提交只解决一个问题(如:git commit -m "fix(login): 修复验证码发送频率限制"

  3. 单个功能分支存活时间不超过 1周,为了避免将来将功能分支合并到主分支时产生过多冲突,并且合并完成后尽快删除本条功能分支,避免成为"僵尸分支",让其他成员误以为该分支还在使用。

  4. 养成每日下班前推送代码的好习惯,为了防止本地代码丢失;方便他人查看我们的进度等等。

这是大概的一个流程,接下来,我们用一个小demo来模拟一下开发流程。

2.1 克隆仓库

如果是自己单独进行一个项目的开发,会使用git init初始化一个本地的git仓库,用来开始一个新项目。但一般来说我们都是团队协作开发一个项目,当我们入职后,使用git clone将远程的代码拉取下来。

有两种代码拉取方式,一种是https方式,每次拉取时都要输入github的账号与密码,比较麻烦。所以我们会使用SSH进行代码的拉取,首先会进行SSH密钥的配置,这个网上都有教程,直接去搜一下即可,配置非常简单。

这样我们就可以直接使用SSH进行代码的拉取啦,不需要再输入账号和密码。

这样我们就成功将这个仓库拉下来了。目前只有readme.md这一个文件,接下来我们来模拟一下在工作中是如何使用git的。

2.2 创建新分支

我们说过,我们不会直接在主分支上进行开发,而是会创建一个新分支进行开发。我们可以在gitlab查看我们的主分支是哪一条:

主分支是master。我们也可以使用git branch命令查看所有分支:

目前只有master这一条主分支,master前面的星号就代表我们目前处于哪一条分支。那么我们如何来创建一条新分支呢?可以使用git checkout -b <branchname>命令。这个命令可以用来创建一个新分支并且切换到这条分支上。

在创建新分支之前一定要保证我们处于主分支上,一般是develop或者main分支上。切换分支直接使用git checkout xxx分支命令。

它输出显示我们已经位于主分支上,然后我们可以基于主分支创建一条功能分支,分支名要明确,比如我们要开发一个用户登录功能,我们一般会写git checkout -b feature/user-login

好的,我们已经创建了一条功能分支并且已经位于这条分支上了,我们可以再次使用git branch查看所有的分支:

现在已经有两条分支了,并且我们目前位于功能分支上。我们还可以使用git branch -r查看远程分支:

因为我们还没有进行推送,所以远程分支上没有我们创建的功能分支。我们还可以使用git branch -a查看所有本地和远程分支:

2.3 在功能分支上进行代码的开发

ok,我们已经创建了一条属于我们自己的功能分支,接下来我们就开始在这条功能分支上进行开发,比如我添加一点内容:

之前的readme中只有git操作这一内容,现在我们添加了一行用户登录功能内容,我们可以发现vscode直接给我们显示出来发生的变化,左边有一串绿色的标记,并且在最左侧的功能栏中的源代码管理产生了一个气泡,说明此时我们有一个更改,并且我们可以直接点那个蓝色的提交按钮进行代码的提交,我们也可以使用命令来提交。

我们可以使用git status来查看目前的状态:

我们发现它显示有一个更改,这表示我们没有将代码提交到暂存区。ok,又来了一个新概念,什么叫暂存区呢?

git中存在工作区、暂存区和版本库的概念:

  • 工作区:工作区是你在本地计算机上的项目目录,你在这里进行文件的创建、修改和删除操作。工作区包含了当前项目的所有文件和子目录。

  • 暂存区:暂存区是一个临时存储区域,它包含了即将被提交到版本库中的文件快照,在提交之前,你可以选择性地将工作区中的修改添加到暂存区。使用git add将代码提交到暂存区。

  • 版本库:版本库包含项目的所有版本历史记录。每次提交都会在版本库中创建一个新的快照,这些快照是不可变的,确保了项目的完整历史记录。使用git commit将在暂存区中的代码提交到版本库中。

最后,当今天的工作结束后,我们使用git push origin将最新的版本库代码推送到远程仓库。

2.4 暂存文件与提交更改

因为我们说过尽量原子化进行开发,当完成了一小部分的开发就去提交一下代码。使用git add .命令可以将所有的更改提交到暂存区,我们还可以指定文件提交到暂存区:

当我们将代码提交到暂存区时,再使用git status查看状态时就会发现已经变绿了,说明我们已经将代码提交到了暂存区。如何再使用git commit将代码提交到版本库中,提交的时候描述信息要说明清楚,说明这是一个什么类型的提交:

一般用feat表示增加新功能,fix表示修复bug。此时我们已经把代码提交到版本库中了,我们再使用git status查看状态:

它就会显示没有东西需要提交到了。

此时如果我们切换到主分支:

我们就会发现主分支与功能分支的差异,我们的功能分支领先于主分支,最后当我们的功能分支开发完毕后,再合并到主分支上。

我们再切换回功能分支,我们还可以使用git log查看历史提交记录:

我们发现总共有两次提交,通过查看所有的提交记录,我们可以进行版本的恢复与回退:

  • git reset:重置当前分支到特定提交

  • git revert:撤销某次提交

2.5 推送更改

最后,当今天的任务完成后,我们将今天的代码推送到远程仓库进行保存,但在推送本地更改之前,最好从远程仓库拉取最新的更改,以避免冲突:

场景 1:需要合并主分支最新代码

适用情况 :其他开发者在 develop 分支提交了新代码,你需要将这些更新合并到自己的功能分支

正确操作

js 复制代码
# 在功能分支操作
git checkout feature/login
git fetch origin              # 获取远程最新状态
git merge origin/develop      # 将 develop 的更新合并到当前分支

场景 2:同步自己的远程功能分支

适用情况:你在其他设备(如公司电脑和家用电脑)上开发同一功能分支

正确操作

js 复制代码
git checkout feature/login
git pull origin feature/login  # 等同于 fetch + merge

为什么推荐先 fetch 再 merge?

  • 安全性git fetch 允许你先查看差异(git log origin/develop),再决定是否合并
  • 可控性 :避免 git pull 自动合并可能引入意外代码

当获取完最新的更改后,我们就将代码推送到远程仓库:

此时我们就会发现我们的远程仓库多了一条分支:

2.6 合并更改

最后,当我们的功能分支开发完毕后,就会去创建一个合并请求(MR/PR),源分支选择:feacture/user-login,目标分支选择:master。当代码审查通过后,我们就需要将功能分支合并到主分支上了。

2.7 删除分支

合并成功之后,我们就需要将这条功能分支删除,使用git branch -d new-feature删除功能分支:

3. 总结

在工作中常用的一些git操作命令就是这些了,如果对你有帮助的话请点个赞吧!

相关推荐
Wyc7240916 分钟前
HTML:入门
前端·html
Sunny_lxm17 分钟前
自定义列甘特图,原生开发dhtmlxgantt根特图,根据数据生成只读根特图,页面展示html demo
前端·html·甘特图·dhtmlxgantt
熊猫钓鱼>_>1 小时前
建筑IT数字化突围:建筑设计企业的生存法则重塑
前端·javascript·easyui
GISer_Jing3 小时前
前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读
前端·javascript·vue
不知几秋3 小时前
数字取证-内存取证(volatility)
java·linux·前端
水银嘻嘻5 小时前
08 web 自动化之 PO 设计模式详解
前端·自动化
Zero1017136 小时前
【详解pnpm、npm、yarn区别】
前端·react.js·前端框架
&白帝&7 小时前
vue右键显示菜单
前端·javascript·vue.js
Wannaer7 小时前
从 Vue3 回望 Vue2:事件总线的前世今生
前端·javascript·vue.js
羽球知道7 小时前
在Spark搭建YARN
前端·javascript·ajax