git项目的流程管控 及 git基础命令介绍

作为接下去gitlab CI/CD教程的前菜,我觉得还是有必要将git的基本操作进行一下说明。其实我自己个人在维护git仓库时,基本上就是一个main分支,add commit push从头撸到尾。

但是在实际工作当中,当我们实际维护项目,还是有必要按照正常项目管控的规范去开展。此处介绍时,我不会把这个过程搞的过于复杂,将建立两个分支:main and dev,模拟使用dev作为feature开发的分支,最终再透过merge request(gitlab)/pull request(github)合并到主分支的过程。

OK,整个过程将基于私有化部署的gitlab进行。

我们假设我们的项目叫做git-tutorial,在最开始的情况下,我们的初始commit为"main-1"

remote: git-tutorial main branch main-1

1. 我们首先需要做的就是将仓库clone本地,完成项目配置

git clone ssh://git@gitlab.ctuber.top:2222/team1/git-tutorial.git

cd git-tutorial/

git config user.name "your name"

git config user.email "your email"

2.正常情况下,我们在local建立我们的开发分支dev,切换至dev进行我们正常的开发,最终将我们开发完成的代码推送至remote,并提交merge request/pull request即可。

git checkout -b dev

进行代码的修改

git add .

git commit -m "dev-1"

git push origin dev

3.登录gitlab/github提交merge request/pull request

4.仓库的管理员进行squash and merge

此处提一嘴,之所以写squash and merge还是希望保持代码提交的整洁。假如你希望保留最原始的信息可以省略squash。


实际情况是,在多人分工的情况下,在我们这个feature开发完成并合并到主分支之前,主分支可能会存在更新。那么在这种情况下,情况就稍微复杂一些。我们需要将远程main分支更新拉取至本地,并进行一次rebase/merge,之后再将代码推送至remote,并提交merge request/pull request。

我们假设我们的项目叫做git-tutorial,在最开始的情况下,我们的初始commit为"main-1"

remote: git-tutorial main branch main-1

1. 我们首先需要做的就是将仓库clone本地,完成项目配置

git clone ssh://git@gitlab.ctuber.top:2222/team1/git-tutorial.git

cd git-tutorial/

git config user.name "your name"

git config user.email "your email"

2.本地仓库切换至dev分支进行开发

git checkout -b dev

代码开发

3.直接在远程仓库对于main分支进行一次代码的修改并提交版本main-2

4.将本地仓库切换至main分支,拉取最新的main-2版本

git checkout main

git pull

5.本地仓库切换至dev分支,进行代码的rebase

git checkout dev

git rebase main //假如存在conflict,正常解决即可。

6.推送至远程仓库

git push origin dev

7.登录gitlab/github提交merge request/pull request

8.仓库的管理员进行squash and merge

还有一个注意点,假如你希望的代码极度整洁,只有一条线的话,你可以开启Fast-forward merge功能,这样的话,合并时就不会产生新的commit节点,导致存在分叉。强迫症可以试一下。

git基本操作的说明补充,假如你对于git操作不熟悉的话,可以参考:

配置的初始化:
全局
Git global setup
git config --global user.name "your name"
git config --global user.email "your email"
项目
git config  user.name "your name"
git config  user.email "your email"
配置存放在.git目录

你的本地仓库由git维护的三个部分组成:
第一个是你的 工作目录,它持有实际文件。
第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动。
第三个是 HEAD,指向你最近一次提交后的结果。
"working dir"   <-add->  "index"  <-commit->   "HEAD" 

你可以计划改动(把它们添加到缓存区),使用如下命令:
git add <filename>
git add *
git add .

使用commit命令以实际提交改动,将改动提交到HEAD,但没到你的远端仓库。
git commit -m "代码提交信息"

执行如下命令以将这些改动提交到远端仓库,可以把 main 换成你想要推送的任何分支。
git push origin main

添加分支
git branch dev
切换分支 
git checkout dev
合二为一
git checkout -b dev 
删除分支
git branch -d
git branch -D 强制

在合并改动之前,也可以使用如下命令查看:
git diff <source_branch> <target_branch>

其他常用的命令:
git branch -a
git diff
git clone http://0.0.0.0/helloworld.git -b branchNAME 不加就拉取默认分支(main)
git pull = git fetch+git merge

git reset --hard HEAD^ 回退到上一版本
git reset --hard HEAD^^ 回退到上上版本
git reset --hard commit_id 回退到某一版本

git log 
git log --graph

问题,merge与rebase有啥区别?
这个建议各位去学习一下。建议使用rebase,保持代码的整洁干净,特别是项目组人比较多的情况,本文基于rebase。