在工作中,我们必不可少需要掌握的就是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进行代码审查,审查通过后一般是由主管来将这条功能分支合并到主分支。然后合并完成后我们再把这条功能分支远程和本地删除
其中有几个比较重要的小点:
-
我们不会直接在主分支上进行开发,而是在主分支上创建一个自己的功能分支,在这条功能分支上进行开发,最后代码通过审查后,再合并到主分支上。这是为了保证主分支的整洁与减少冲突,当所有人都在主分支上进行开发时,代码将会变得非常混乱。
-
原子化提交,每次提交只解决一个问题(如:
git commit -m "fix(login): 修复验证码发送频率限制"
) -
单个功能分支存活时间不超过 1周,为了避免将来将功能分支合并到主分支时产生过多冲突,并且合并完成后尽快删除本条功能分支,避免成为"僵尸分支",让其他成员误以为该分支还在使用。
-
养成每日下班前推送代码的好习惯,为了防止本地代码丢失;方便他人查看我们的进度等等。
这是大概的一个流程,接下来,我们用一个小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操作命令就是这些了,如果对你有帮助的话请点个赞吧!