git项目的流程管控及git基础命令介绍
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。