《Git 的正确使用姿势与最佳实践》| 青训营

110 阅读6分钟

Git 是现代软件开发中最受欢迎的版本控制系统之一。本文将介绍 Git 的基本操作和高级用法,并通过执行代码和模拟实例演示,帮助读者更好地理解 Git 的工作原理和最佳实践,提高团队协作效率。

一、Git 简介

Git 是一个分布式版本控制系统,由 Linus Torvalds 在2005年创建。它具有以下优点:

  • 高效:Git 使用快速的数据结构和算法,可以处理大型项目的版本控制需求。
  • 分布式:每个开发者都拥有一个完整的代码仓库,可以在本地进行提交、分支、合并等操作,无需依赖中央服务器。
  • 强大的分支管理:Git 提供了强大的分支管理功能,允许开发者轻松创建、合并和删除分支。
  • 轻松协作:Git 允许多个开发者同时协作开发,通过远程仓库进行代码共享和合作。

二、Git 基本操作演示

初始化仓库:

首先,在本地创建一个新目录,并进入该目录:

 mkdir myproject
 cd myproject

然后,执行以下命令初始化 Git 仓库:

 git init
添加文件并提交:

在 myproject 目录下创建一个名为 hello.txt 的文件,并将其添加到 Git 仓库:

 echo "Hello, Git!" > hello.txt
 git add hello.txt

接着,提交这个文件到仓库:

 git commit -m "Add hello.txt"
查看提交历史:

使用 git log 命令查看提交历史:

 git log

输出应该类似于:

 commit 1234567 (HEAD -> master)
 Author: Your Name <your.email@example.com>
 Date:   Sat Jan 1 00:00:00 2023 +0000
 ​
     Add hello.txt
创建分支并切换:

现在,我们创建一个新的分支 feature 并切换到该分支:

 git checkout -b feature
在 feature 分支上做一些修改并提交:

hello.txt 文件中添加一行内容:

 echo "This is a new feature!" >> hello.txt
 git add hello.txt
 git commit -m "Add new feature to hello.txt"
切换回主分支 master 并合并 feature 分支:
 git checkout master
 git merge feature
查看合并后的提交历史:
 git log

输出应该类似于:

 commit 2345678 (HEAD -> master)
 Merge: 1234567 abcdefg
 Author: Your Name <your.email@example.com>
 Date:   Sat Jan 1 00:00:00 2023 +0000
 ​
     Merge branch 'feature'
 ​
 commit 1234567 (feature)
 Author: Your Name <your.email@example.com>
 Date:   Sat Jan 1 00:00:00 2023 +0000
 ​
     Add new feature to hello.txt
 ​
 commit abcdefg
 Author: Your Name <your.email@example.com>
 Date:   Sat Jan 1 00:00:00 2023 +0000
 ​
     Add hello.txt

三、Git 最佳实践演示

在 Git 中,有一些最佳实践可以帮助团队高效地协作,确保代码的稳定和质量。下面我将演示一些常用的 Git 最佳实践,包括分支管理、代码审查和合并请求等。

分支管理:

首先,我们创建一个新的 Git 仓库,并在该仓库中进行开发。

 # 创建一个新目录并进入该目录
 mkdir myproject
 cd myproject
 ​
 # 初始化 Git 仓库
 git init

然后,我们创建一个开发分支 dev 并切换到该分支:

 git checkout -b dev

dev 分支上进行开发,并在 hello.txt 文件中添加一行内容:

 echo "This is a development branch!" >> hello.txt
 git add hello.txt
 git commit -m "Add development message to hello.txt"
代码审查:

在实际开发中,代码审查是一种常见的实践,它可以帮助团队发现潜在的问题并提高代码质量。

假设现在我们有一个团队成员,名为 Alice,她想要审查我们的代码。首先,Alice 切换到 dev 分支并拉取最新的代码:

 git checkout dev
 git pull origin dev

然后,Alice 可以查看 hello.txt 文件的更改,并提出评论或建议:

 # 查看最近一次提交的更改
 git diff HEAD~1 hello.txt

Alice 可以根据代码的更改提出评论,或者直接在 hello.txt 文件中修改并提交:

 # 修改文件并提交
 echo "This is a development branch! Code review by Alice." > hello.txt
 git add hello.txt
 git commit -m "Code review by Alice"
合并请求:

在代码审查完成后,我们可以将 dev 分支合并到 master 分支,并发布代码。

首先,切换回 master 分支并拉取最新代码:

 git checkout master
 git pull origin master

然后,将 dev 分支合并到 master 分支:

 git merge dev

如果合并过程中出现冲突,需要手动解决冲突后再提交。

最后,将合并后的代码推送到远程仓库:

 git push origin master
提交规范:

为了保持提交历史的清晰和易读,推荐使用规范的提交信息格式。例如,每次提交时使用以下格式:

 csharpCopy code
 feat: add new feature
 ​
 Add a new feature to improve performance.
 ​
 Fixes #123

其中,feat 表示本次提交是一个新功能,fix 表示本次提交是修复 Bug。提交信息应该简明扼要地描述本次提交的内容和目的,同时可以附带关联的 Issue 编号。

四、Git 高级用法演示

Git 高级用法之演示:Rebase 和 Cherry-pick

在 Git 中,Rebase 和 Cherry-pick 是两个常用的高级用法,它们可以帮助我们更好地管理提交历史和处理代码变更。下面我们通过一个示例项目演示这两个高级用法的具体操作和结果。

示例项目:假设我们有一个名为 "AdvancedGitDemo" 的开源项目,其中包含三个分支:master、feature1 和 feature2。现在我们要演示 Rebase 和 Cherry-pick 操作。

Rebase 操作演示:

首先,我们切换到 feature1 分支,并做一些修改并提交:

 git checkout feature1
 # 进行文件修改,然后提交
 git add file1.txt
 git commit -m "Add new feature to file1.txt"

接下来,切换到 master 分支并做一些修改并提交:

 git checkout master
 # 进行文件修改,然后提交
 git add file2.txt
 git commit -m "Add new feature to file2.txt"

现在,我们要将 feature1 分支的修改合并到 master 分支,并使用 Rebase 来保持提交历史的线性。

 git checkout feature1
 git rebase master

在这个过程中,Git 会将 feature1 分支上的提交暂时保存起来,然后将 feature1 分支指向 master 分支的最新提交,接着再依次将之前保存的提交依次应用到 master 分支上。如果在 Rebase 的过程中有冲突,需要手动解决冲突后再继续。

完成 Rebase 后,我们可以使用 git log 命令查看提交历史:

 git log --oneline --graph --all

结果应该类似于:

 * 1234567 (HEAD -> feature1) Add new feature to file1.txt
 | * abcdefg (master) Add new feature to file2.txt
 |/  
 * 7890abc Initial commit

可以看到,feature1 分支上的提交已经线性地添加到了 master 分支上。

Cherry-pick 操作演示:

接下来,我们演示 Cherry-pick 操作,假设我们要将 feature2 分支上的某个提交应用到 master 分支上。

首先,切换到 feature2 分支,并查看提交历史:

 git checkout feature2
 git log --oneline

找到我们要应用到 master 分支的提交的 commit-hash。

然后,切换回 master 分支并执行 Cherry-pick 操作:

 git checkout master
 git cherry-pick <commit-hash>

Git 会将指定的提交应用到当前分支(master 分支)上,并自动生成一个新的提交。

使用 git log 命令查看提交历史:

 git log --oneline --graph --all

结果应该类似于:

 * 2345678 (HEAD -> master) Cherry-pick <commit-hash>
 | * 1234567 (feature2) Add new feature to file3.txt
 |/  
 * abcdefg Add new feature to file2.txt
 * 7890abc Initial commit

可以看到,我们成功将 feature2 分支上的指定提交应用到了 master 分支上,并生成了一个新的提交。