通俗易懂的 git 入门

249 阅读9分钟

本文已参与掘金创作者训练营第三期「话题写作」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

本篇文章是将本人在开发时应对git工作流程的总结,希望大家能够有一个合理的操作流程,从而避免很一些在开发中容易遇到的 多人开发/单人开发 的坑。

对这些坑,本人也会讲出自己的看法,如有不足,还请各位提出宝贵意见。谢谢大家~~~~

git工作流单人开发

为什么要先说说单人开发呢?是因为本人总是进行单人开发,虽然也协同开发过,但是大部分时间都是我自己开发一个项目。即使是自己开发,我也把分支搞乱过,或者将功能写在了一个分支,导致无法提测部分功能。

接下来我来得吧得吧一些基础,以及自己踩过的坑,和本人如何解决的。

git clone ...

开发之前我们肯定是有一个代码仓库在远程上,大部分公司的项目一般都在gitLub上,如图:

image.png

(信息被我打了万恶的马赛克~~~)

我们可以通过 git clone ssh/http 的两个链接从而将代码拉取到我们自己的计算器。

image.png

这就是 git clone 的作用:

  • 将代码拉取到自己的本地

git pull

我的习惯是通过远程创建好分支,之后通过git pull拉取远程的分支到本地,再进行后续的操作。

如果你的习惯是从本地新建分支,再推送到远程仓库也是一样的。有些人说从本地新建分支会更好,这就是仁者见仁智者见智了。我是能省就省,因为我比较懒,哈哈哈。

这里有坑:这个坑很常见,大家应该都知道。我们在刚开始写一个需求的时候,一定要从生产环境的分支创建一个新的开发分支。

gitLub的操作如下:

点击下面这个图的 branch

image.png

我这里举例是将master分支表示生产环境,不代表真实生产环境。公司的生产环境名字可能都不相同,请自己酌情考虑哦~~~

下面的Branch name就是你基于生产环境创建的分支。

image.png

当你起好名字,底下Create beanch就变成绿色了(别闹~),点击一下就可以创建了。

此时,去本地git pull将远程分支拉取下来。该分支就会在你的本地了。

git checkout ...

这个命令会创建并切换分支,当你本地没有你要切换的分支时,就会先运行创建,再切换到创建好的分支。

注意:如果你创建的分支是远程没有的,是无法执行这条命令的。有一次打错字了,害得我搞了半天,最后发现字打错了导致始终提示我远程并没有此分支。

切换到我们要开发的分支之后,我们就可以开发我们该分支所要开发的需求。

git add .

开发了一段代码之后,将我们的代码存放到暂存区。

啥叫暂存区?

暂存区一般在 .git 目录下的 index 文件中,这个就是暂存区。

.git目录是啥?

你咋这么多问题呢?哈哈哈哈,开个玩笑。.git其实是隐藏目录,在运行git init时会生成这个目录,这里先不考虑。

git commit -m '...'

将我们暂存区的代码提交到版本库中。

什么叫版本库?咋这么多名词? .git隐藏目录就是版本库,相应的目录会产生更新。也就是说现在我们更改的代码就被保存在.git目录。

git push

将我们的代码推送到远程分支。

目的:

  • 将代码存储,避免丢失
  • 为了之后将代码合并到测试环境分支,用于提测。

git branch --set-upstream-to origin/...

如果你从本地创建的分支,修改了代码,开开心心的使用 git push推送到远程之后,发现报错了。

错误提示为,没有关联到远程分支,那就请使用此条命令。此条命令是将本地代码与远程分支相关联。

之后再push就应该可以了。

git merge ...

git merge 是将当前所在分支和你想要合并的分支进行合并。

很是绕口,就这么理解,当前切换到测试分支(假设叫:stage),我要将我的xxx分支代码合并到stage

输入命令:git merge xxx 就可以了。

这个命令可以这样理解,我是将xxx分支代码拉取到当前所在分支,并合并代码。

一个人开发的时候肯能不会产生冲突,但是两个人开发就不确定了。接下来聊聊多人开发的git流程。

git工作流多人开发

多人开发的时候,最重要的就是多人需求不同,每次从哪里创建新的分支?每次合并直接合并在测试分支/生产分支行不行?

这两个问题在多人开发中尤为重要。先来讲讲每次从哪里创建新的分支?

git pull

我依然是使用git pull去拉取远程分支,但是创建分支从哪里创建的?这个需要很细节的考虑。

举个🌰:

我们公司的一个项目需要开发新需求,两个人也好,三个人也好,反正多个人一起开发。

这时候大家都知道,我们都会从生产环境创建新的分支。不管你是通过本地的git branch创建,最后git push origin推送到远程也好,还是我上面说的通过 gitLab 创建分支,git pull将远程分支拉取到本地也好,反正是一定要从生产环境创建新的分支的。

不管是自己开发,还是多人协同,一定不能从测试环境创建分支,为什么?因为测试环境可能存在没有上线的代码。如果测试环境过于混乱,那请创建一个新的测试分支,重新基于这个分支进行构建项目。避免因为其他无关代码产生bug耽误时间。

以上是刚开始一个项目的时候。那万一我是接了别人的需求,别人的分支没写完咋办?

第一问清楚,或者看一下他之前从哪个分支迁移出来的的代码。如果不是生产环境,那你最按照上面的重新创建,重新开发自己的代码。如果是,那就直接用他的也未尝不可。

现在开始开发就算解决了,接下来看看重中之重的合并代码。

git merge

多人开发在合并的时候是非常难受的,尤其是代码出现交叉的时候。也就是冲突的时候。

我们在git merge之前先思考上面的第二个问题。

直接合并在测试分支/生产分支行不行?

答案:不行。原因是:如果冲突解决不好,就不断来来回回的修改 测试环境/生产环境。直到你都不知道该怎么改了。此时测试环境/生产环境已经乱套了,你还的回滚你和他的所有代码。。。。异常难受

是不是想想就难受,哈哈哈哈。那该怎么做?

举个🌰:

我准备放到测试环境,应该先从测试环境分支迁移出一个新的分支,比如这个分支叫做 merge_stage。

我依然用我gitLub的操作,git pull一下拉取到本地,然后git checkout merge_stage,切换到这个分支,然后 git merge xxx(我的开发分支)。

在我本地运行,发现冲突之后,第一时间问和我冲突的开发人,决定留下哪部分。然后本地运行,走走流程无误,通知其他人员我要合并代码到测试,大家稍等。

这样能够降低合并代码的时候,出现错误导致测试环境/生产环境混乱的麻烦。如果你的merge_stage分支混乱了,再重新建一个就好了,stage分支始终保持干净就行呗,哈哈哈哈哈。一点不慌。

git高级

接下来是有可能会遇到的问题,是本人着急开发,忘记流程时导致我两个需求开发到了一个分支,其中一个需求就需要等后面那个开发完之后再一起提测,无法进行分开提测。

虽然最后没啥事儿,和产品商量及时,锅也巧妙的甩出去了,但是总要进步,事后我考虑咋解决这样的问题,并且将总结的用到了又一次着急的时候。哈哈哈哈。

git cherry-pick commitHash

git log能够查看你git commit的提交记录,每个记录都有hash值作为标记

当你开发的分支没有其他分支代码的时候,可能你只是需要另外一个分支的其中一个或者多个提交。

这时候就去看另外一个分支里,我所需要的commitHash值,然后再切换回我当前分支进行git cherry-pick

这样,另外一个分支的这部分提交的代码就会和我当分支合并,当前分支就存在了那部分代码。并且只是覆盖了那部分。没冲突。

如果你想要多个commitHash值。git cherry-pick ...,这样就再也不怕写在一个里面之后无法分开提测了,但是你一定要及时发现,及时止损。不然你的commitHash需要多少个?你想想如果有20个进行cherry-pick,你难受不?哈哈哈哈哈哈

总结

这篇文章是从本人开发过程中总结出来的,还请大家踊跃的指出我操作过程中存在的错误。进而帮助看我这篇文章的同学养成一个好的操作习惯。再次感谢大家支持~~~~