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

72 阅读5分钟

前言

Git的起源和应用想必大家都很清楚了,之前刚读研的时候学习过一些Git,但是过了一年又忘了,下半年涉及到维护自己的项目以及论文代码之类的,感觉还是很重要,今天借着夏令营这个机会,再学习一下

理论知识

Git工作流程

image.png

Git的主要区域是由工作区,暂存区,仓库区和远程仓库组成的

简单来说,

工作区(Working Directory): 是指你在电脑文件系统中能够看到的项目目录。这个目录包含了你项目的所有文件,包括源代码、文档、图像等等。工作区中的文件是你正在编辑和开发的文件,它们是未经Git管理的。通俗来说,也就是我们自己在本地写代码的地方

暂存区(Staging Area) : 暂存区是一个介于工作区和本地仓库之间的缓冲区域。当你对工作区中的文件进行修改后,可以使用git add命令将这些修改添加到暂存区。暂存区存储了即将被提交到本地仓库的更改,允许你对提交的内容进行精确控制

仓库区(Repository,本地仓库) :本地仓库是Git存储项目历史记录的地方,它位于自己的计算机上。- 使用git commit命令时,暂存区中的更改将被提交到本地仓库,形成一个新的版本(commit)。本地仓库保留了项目的完整版本历史。

远程仓库(Remote Repository) :远程仓库是位于远程服务器上的Git仓库,通常用于团队协作和备份

也就是说,整体的数据流向,其实是从我们编写代码的工作区->暂存区->仓库区->远程仓库

HEAD

在Git中,HEAD 是一个指向当前所在分支或提交(commit)的引用(reference)。它是一个非常重要的指针,用于标识当前工作目录所处的状态或分支

具体来看的话:

HEAD 指向分支:当你位于一个分支上时,HEAD 指向该分支的最新提交,表示你当前正在该分支上工作。例如,如果你在主分支上,HEAD 将指向主分支的最新提交。

HEAD 指向提交:有时,你可能不处于任何分支上,而是在“分离头指针”状态下。在这种情况下,HEAD 直接指向一个提交,而不是分支。这意味着你的更改将不会自动成为某个分支的一部分,而是在 HEAD 处创建一个匿名分支

HEAD 引用变化:当你创建新的提交或切换分支时,HEAD 引用会变化。例如,当你执行 git commit 命令提交更改时,HEAD 会更新为新的提交

通过HEAD,可以帮助我们确定当前工作目录的状态,切换分支,创建提交以及执行其他与版本控制相关的操作

实操

首先,我在我的github中创建好了一个项目

image.png

然后,我在本地创建了一个文件夹,用于保存本地的数据

image.png

然后,在文件夹内启动Git Bash

检出远程仓库

从指定的URL克隆一个远程Git仓库到本地计算机

执行命令git clone https://github.com/LinkWithMe/summerHW.git ,执行后的结果如下:

image.png

而我的文件夹里,已经出现了和github上一模一样的文件

image.png

同步远程分支

通过命令git branch -a查看本地和远程所有分支,如下:

image.png

代码提交

一些开发人员喜欢在一个本地分支上,连续提交代码。这是一个很不好的习惯,尤其是在多人协作的情况下。这会导致每笔提交之间存在依赖关系,即使每笔修改之间毫无瓜葛。进而可能导致 merge 冲突、cherry-pick 合入冗余代码

emmm.........我之前也是这么做的

保留本地分支

我们可以保留一个本地分支,专门用于同步代码

首先,通过git status 查看本地 master 分支的状态:

image.png

这是,我们本地是没有发生改变的

我们改一下md文件来表示我们本地发生更改,再次进行实验:

image.png

这时,就提醒我们了,这里正确的做法是:

  1. git stash save:这一步是将本地的尚未提交的修改保存到一个临时存储区(stash)中。这些修改可能包括未提交的代码更改或者文件,但你想要在同步远程仓库之前保留它们。

image.png

  1. git pull --rebase:这一步是从远程仓库中拉取最新的更改,并且使用--rebase选项进行变基。具体流程如下:

    • Git会从远程仓库拉取最新的提交(git fetch)。
    • 然后,Git会将你的本地分支(通常是mastermain分支)上的提交和拉取下来的提交进行比较。
    • 如果有冲突,Git会将拉取的提交应用在你的提交之上,然后停下来,让你解决冲突。
    • 一旦解决了所有冲突,你可以继续进行变基,将你的本地提交依次应用在拉取的提交之上,以确保历史记录的线性性。

    使用--rebase选项的主要好处是,它可以保持你的提交历史更加整洁,不会产生不必要的合并提交。

    image.png

    ...这里可能会因为网络问题而导致出错

  2. git stash pop:在成功进行了git pull --rebase之后,你可以使用git stash pop来将之前存储的本地修改重新应用到你的工作目录中。

  3. 解决冲突:如果在变基或者git stash pop的过程中发生了冲突,Git会提示你手动解决这些冲突。你需要打开冲突的文件,查看冲突部分,并根据你的需求编辑文件以解决冲突。解决冲突后,你需要使用git add将文件标记为已解决,然后继续变基或者应用存储的修改。

这么做的主要目的是,在同步远程仓库的最新更改时,保持本地修改的正确性

接下来,通过commit提交更改

image.png

最后,通过命令git push origin main推送到Github

总结

Git作为企业开发的常用工具,只有准确的使用,才能方便同事和自己