一套极简的GIT工作流,帮助开发者在项目中快速开始

快速开始

GIT有三部分:

  1. 远端的仓库,可以是github,也可以是自建git服务器,称作remote
  2. 本地的git仓库,称作local
  3. 最后是本地的仓库文件,被称作disk

假设云端有一个git仓库,有一个主分支main,我们可以使用命令:

1
git clone repository-url

将它克隆到本地。此时remotelocaldisk是一样的。

img

main分支一般存储了项目最终的版本,而其他分支可以是正在开发中的有新功能的版本。

创建分支

但我们要修改代码时,首先建立一个新的feature branch也就是分支。

我们不会直接将修改后的代码push到主分支中,因为这会导致主分支不稳定。另外创建新的分支也有利于多人协作。

所以我们会创建一个新的feature branch

使用命令:

1
git checkout -b my-feature

其中my-feature是新分支的名字。此时local会从当前分支拷贝出一个新的分支。

img

此时,git会将当前分支checkout到新分支。

修改代码

当你在新分支上写完代码后,可以使用git diff命令查看代码的改变,也就是当前分支的disklocal的代码有什么区别。

img

然后使用git add changed-file将修改的文件添加到暂存区。强烈建议在进行这一步前对代码的更改进行检查。添加后,git就知道现在有一些代码将被commit

img

然后我们可以使用git commit -m 'I am committing'将添加的文件提交到local。此时我们的disklocal都被更改了。

img

推送至远程服务器

此时我们需要将代码push到github或者其他git服务器。我们可以使用命令:

1
git push origin my-feature

此时远程服务器将同步local中的代码,包括新的分支和其更改。

img

同步分支

一般情况下,当我们在自己的分支对代码进行修改后,主分支也会被其他人更改,产生了新的commit。因此我们需要在新的主分支上测试我们修改的代码,保证我们的改动在最新的版本上依然有效。因此我们需要将main分支的更新同步至当前分支也就是my-feature

因此我们首先需要更新localmain分支。使用git checkout main命令将当前分支切换到主分支,此时disk中的代码将回到最初的main分支:

img

然后我们使用命令

1
git pull origin master

remotemain分支同步至localmain分支。

img

此时remotelocaldisk的主分支将会一致。

分支变基

然后我们使用git checkout my-branch切换到新分支上。

此时我们使用命令:

1
git rebase main

此命令会将当前的主分支变基my-feature中,并尝试在此基础上将my-featurecommit放回。

img

此时可能出现rebase conflict,此时我们需要手动选择需要的代码。

完成后我们发现,当前分支的修改变成了在最新的main分支上的修改。一条线路,与merge相比更加清晰。

推送新分支

然后我们需要将变基后的分支推送到远程服务器。使用命令:

1
git push -f origin my-feature

进行推送。由于我们进行了rebase操作,因此需要添加-f参数表示强制推送。

img

合并到主分支

到此,远程的my-feature分支也被同步,我们就需要将此分支合并到主分支。这个过程被称为pull request,也就是向此项目的主人提交一个合并到主分支的请求。

img

然后此项目的维护者将会对提交进行review等审查后,将对此提交进行Squash and merge,此操作会将my-feature的所有commit合并成一个commit,这将让主分支的commit尽可能地保持简洁。并且项目的维护者会将pull request中的更改合并到主分支中也就是merge

img

删除分支

此时我们就可以将远端的my-feature直接删除。在github上可以直接点击delete branch删除分支。

然后远端的my-feature将会被删除,此时localdisk中依然有my-feature分支,于是我们使用git checkout main切换到主分支,然后使用命令:

1
git branch -D my-feature

以此删除local中的my-feature分支。

img

同步主分支

最后我们使用git pull origin master将远端当前的主分支同步到localdisk中。

img

此时我们的项目又回到了同步的状态,同时主分支也包含了我们的更新。

此教程总结自十分钟学会正确的github工作流,和开源作者们使用同一套流程哔哩哔哩bilibili

⬆︎TOP