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

1.安装Git

选择命令行,可以从Git网站下载Git的安装程序并安装。

若使用Mac,也可以使用套件管理工具MacPorts或Homebrew来安装。

工作树和索引

在Git管理下,我们将实际操作的目录称为工作树(Working Tree)。

Git使用索引(Index)来作为准备提交到数据库的区域。索引充当了工作树和数据库之间的缓冲区。

当执行提交(Commit)操作时,Git并不直接将工作树的状态保存到数据库中,而是将当前设置在索引区域的状态保存到数据库。因此,要提交文件,首先需要将文件添加到索引区域。

这种设计有几个好处。首先,通过索引区域,我们可以避免提交工作树中不必要的文件,只提交我们选择的文件。其次,我们可以将文件的部分修改内容添加到索引区域,而不是全部修改,然后进行提交。

通过这种方式,Git提供了更灵活的提交方式,使得版本控制更加精细和高效。

2.初期设定

完成Git安装后,需要设置用户名和电子邮件地址。这个设置只需要在安装Git后进行一次即可。这些信息将作为提交者信息显示在更新历史记录中。

Git的配置存储在用户本地目录的.gitconfig文件中。可以直接编辑该配置文件,或者使用config命令进行配置。

以下是一些常用的配置命令示例:

设置用户名和电子邮件地址:

arduino 复制代码
$ git config --global user.name "<用户名>"
$ git config --global user.email "<电子邮件>"

启用Git的彩色显示:

scss 复制代码
$ git config --global color.ui auto

您还可以为Git命令设置别名。例如,将"checkout"命令缩写为"co",然后您只需使用"co"来执行相应的命令:

csharp 复制代码
$ git config --global alias.co checkout

通过这些配置命令,您可以根据个人喜好和习惯来自定义和优化Git的使用体验。

3.新建数据库

3.1 初始化数据库

您可以按照以下步骤在本地创建一个新的Git仓库,并将名为"tutorial"的空目录添加到该仓库中。

首先,在任意位置创建一个名为"tutorial"的目录:

shell 复制代码
$ mkdir tutorial

然后,进入"tutorial"目录,并使用"git init"命令将其初始化为Git仓库:

shell 复制代码
$ cd tutorial
$ git init

通过以上步骤,您成功地将新创建的"tutorial"目录设置为Git仓库,并开始进行版本控制。现在,您可以在该目录下进行文件操作、进行提交等Git操作了。

3.2 确认状态

请使用status命令确认工作树和索引的状态。

lua 复制代码
$ git status

3.3 添加文件至索引

将文件加入到索引,要使用add命令。在指定加入索引的文件。用空格分割可以指定多个文件。

csharp 复制代码
$ git add <file>..

Tips

指定参数「.」,可以把所有的文件加入到索引。

csharp 复制代码
$ git add .

3.4 提交文件(commit)

已加入到索引,我们就可以提交文件了。请执行如下显示的commit命令。

ruby 复制代码
$ git commit -m ""

执行commit命令之后确认状态。

ruby 复制代码
$ git commit -m "first commit"

从status响应我们可以看到没有新的变更要提交。

3.5 查看记录

使用log命令,我们可以在数据库的提交记录看到新的提交。

shell 复制代码
$ git log

4.push到远程数据库

向远程数据库推送本地数据库的修改记录

4.1 给数据库起别名

给远程数据库取一个别名。这样,下次推送的时候就不需要输入长串的远程数据库地址了。

请使用remote指令添加远程数据库。在处输入远程数据库名称,在处指定远程数据库的URL。

xml 复制代码
$ git remote add <name> <url>

eg.

csharp 复制代码
$ git remote add origin https://XXX.git

执行推送或者拉取的时候,若省略了远程数据库的名称,则默认使用名为"origin"的远程数据库。因此一般都会把远程数据库命名为origin。

4.2 push到远程数据库

xml 复制代码
$ git push <repository> <refspec>...

运行push可向远程数据库'origin'进行推送。

  • 当执行命令时,如果指定了-u选项,那么下一次推送时就可以省略分支名称。
  • 注意:首次运行指令向空的远程数据库推送时,必须指定远程数据库名称和分支名称。
perl 复制代码
$ git push -u origin master

5.clone克隆远程数据库

使用clone指令可以复制数据库,在指定远程数据库的URL,在指定新目录的名称。

shell 复制代码
$ git clone <repository> <directory>

执行以下指令后,会在目录(tutorial2) 复制远程数据库。

php 复制代码
$ git clone https://XXX.git tutorial2

6.从克隆的数据库进行push

修改后的文件进行推送,更新远程数据库。当在克隆的数据库目录执行推送时,可以省略数据库和分支名称。

perl 复制代码
$ git push

7.从远程数据库pull

要将远程数据库的内容更新到本地数据库,您可以执行拉取(Pull)操作。这将从远程数据库下载最新的变更日志,并将其应用到本地数据库相应的内容上。

在我们的例子中,我们要将之前从"tutorial2"推送到远程数据库的内容拉取到本地数据库目录"tutorial"中。

使用"git pull"命令进行拉取操作。如果省略数据库名称,则默认使用名为"origin"的数据库进行拉取。

xml 复制代码
$ git pull <repository> <refspec>...

以下是针对"tutorial"数据库的操作,请执行以下命令:

ruby 复制代码
$ git pull origin master

执行上述命令后,Git将从远程数据库的"origin"数据库中拉取最新内容并应用到"master"分支上。

您可以使用"log"命令来确认历史记录是否已更新:

shell 复制代码
$ git log

通过执行这些命令,您可以将远程数据库的最新变更同步到本地数据库,并查看更新后的历史记录。

8.合并修改记录

在执行拉取(Pull)操作后,如果其他人已经向远程数据库推送了内容,那么在下一次推送(Push)之前,您的推送将被拒绝。

这种情况下,您的推送将被拒绝,直到您读取并合并其他人推送的变更内容。如果您试图覆盖已有的变更记录而不进行合并,那么其他人推送的变更将会丢失。

Git在合并操作时会自动尝试合并已有的变更点。然而,也存在无法自动合并的情况,这时需要手动进行合并操作。

因此,在进行推送之前,务必先拉取远程数据库中的最新变更,并进行合并操作以确保您的推送能够包含其他人的变更内容。这样可以避免冲突和数据丢失,保持数据库的一致性。

==分割线上方是本地数据库的内容,下方是远程数据库的编辑内容。

再次重复add,commit操作。

用log命令来确认数据库的历史记录是否准确。指定--graph选项,能以文本形式显示更新记录的流程图。指定--oneline选项,能在一行中显示提交的信息。

css 复制代码
$ git log --graph --oneline

分支 (branch)

在软件开发过程中,多人可能同时负责开发新功能或修复Bug。此外,可能会存在多个版本的软件发布,并需要对这些版本进行维护。

幸运的是,Git的分支功能可以支持同时进行多个功能的开发和版本管理。

分支是为了将修改记录的整体流程分开保存而创建的。一旦分支创建,它就独立于其他分支,因此可以在同一个数据库中同时进行多个修改。分支之间可以进行合并操作,将不同分支上的修改合并到一起。

通过使用分支,团队成员可以并行开发不同的功能或修复不同的Bug,每个分支都是相互独立的。这样可以提高开发效率,并能更好地管理不同版本的软件。

当某个功能或Bug修复完成后,可以将其分支合并回主分支或其他适当的分支,以将修改集成到主要代码库中。

Git的分支功能为团队协作和版本管理提供了强大的支持,使得软件开发过程更加灵活和高效。

master分支

在数据库进行最初的提交后, Git会创建一个名为master的分支。因此之后的提交,在切换分支之前都会添加到master分支里。

应用分支

合并分支(Merge)

合并分支是为了能够随时发布发布版本而创建的分支,它还可以作为Topic分支的源分支。保持分支的稳定状态非常重要。如果需要进行更改,通常会先创建一个Topic分支,并使用CI工具(如Jenkins)对该分支进行自动构建和测试。

通常,大家将主分支(master)作为合并分支使用。

Topic分支

Topic分支是为了开发新功能或修复Bug等任务而创建的分支。如果需要同时进行多个任务,可以创建多个Topic分支。

Topic分支是从稳定的合并分支创建的。完成任务后,需要将Topic分支合并回合并分支。

分支切换

要切换到不同的工作分支,可以使用checkout命令。checkout操作会将工作树中向目标分支提交的修改内容还原回去。切换后的提交记录将会追加到目标分支上。

HEAD指向当前正在使用的分支的最新提交。通常,默认情况下它指向主分支(master)的最新提交。通过移动HEAD,可以切换使用不同的分支。

存储(stash)

当切换到其他分支时,如果有未提交的修改或新增的文件仍保留在索引区域或工作树中,那么这些修改内容将会从原分支移动到目标分支。

但是,如果目标分支中的相同文件也有修改,切换操作将会失败。此时,您可以选择先提交修改内容,或者使用stash暂存修改内容,然后再进行切换。

stash是一个临时保存文件修改内容的区域。您可以使用stash暂存工作树和索引中尚未提交的修改内容,然后可以在以后将这些暂存的修改应用到原分支或其他分支上。

相关推荐
千慌百风定乾坤13 小时前
Go 语言入门指南:基础语法和常用特性解析(下) | 豆包MarsCode AI刷题
青训营笔记
FOFO13 小时前
青训营笔记 | HTML语义化的案例分析: 粗略地手绘分析juejin.cn首页 | 豆包MarsCode AI 刷题
青训营笔记
滑滑滑2 天前
后端实践-优化一个已有的 Go 程序提高其性能 | 豆包MarsCode AI刷题
青训营笔记
柠檬柠檬3 天前
Go 语言入门指南:基础语法和常用特性解析 | 豆包MarsCode AI刷题
青训营笔记
用户967136399653 天前
计算最小步长丨豆包MarsCodeAI刷题
青训营笔记
用户52975799354723 天前
字节跳动青训营刷题笔记2| 豆包MarsCode AI刷题
青训营笔记
clearcold4 天前
浅谈对LangChain中Model I/O的见解 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵4 天前
【字节青训营】 Go 进阶语言:并发概述、Goroutine、Channel、协程池 | 豆包MarsCode AI刷题
青训营笔记
用户336901104444 天前
数字分组求和题解 | 豆包MarsCode AI刷题
青训营笔记
dnxb1234 天前
GO语言工程实践课后作业:实现思路、代码以及路径记录 | 豆包MarsCode AI刷题
青训营笔记