本文主要包括:
- git常用命令
- git版本发布流程
- IDEA使用git方式
git常用命令
- 分支的创建、切换、删除等操作
## 基于develop创建分支。 git branch mydev develop ## 切换分支 git checkout mydev ## 创建分支并切换到该分支下 git checkout -b mydev develop ## 删除分支,删除分支需要先切换到它的父分支,例如删除mydev,需要先切换到develop分支 git checkout develop && git branch -d mydev
- 拉取代码与提交代码
## 拉取代码 git clone https://github.com/gujincheng/blog.git ## 提交代码 git add -A ## 提交所有文件 / git add [file1] [file2] ... / git add [dir] git commit -m "commit_message" git push origin branch_name
git版本发布流程
一般情况:
master和develop并行。 - master上始终是最稳定的代码,develop是正在开发的代码。
- feature则是某个开发为了自己的功能拉的分支。
不一般情况: - develop正在开发,如果你上线突然被拒绝了,这时候就要从master上开一个热分支,或者release分支也行,改好之后在分别合并到其他分支。但,本人感觉release通常意味着终止。别在从release上拉分支了。
创建一个release分支
Release分支是从develop分支创建的。
## 基于develop创建release分支。
git checkout -b release-0.2.0 develop
git push origin release-0.2.0 # 新创建的release分支推送到远程仓库
创建新分支以后,切换到该分支,添加版本号。这里,bump-version.sh 是一个虚构的shell脚本,它可以复制一些文件来反映新的版本(这当然可以手动改变–目的就是修改一些文件)。然后版本号被提交。
这个新分支可能会存在一段时间,直到该发行版到达它的预定目标。在此期间,bug的修复可能被提交到该分支上(而不是提交到develop分支上)。在这里严格禁止增加大的新features。他们必须合并到develop分支上,然后等待下一次大的发行版。
完成一个release分支
当一个release分支准备好成为一个真正的发行版的时候,有一些工作必须完成。首先,release分支要合并到master上(因为每一次提交到master上的都是一个新定义的发行版,记住)。然后,提交到master上必须打一个标签,以便以后更加方便的引用这个历史版本。最后,在release分支上的修改必须合并到develop分支上,以便未来发行版也包含这些bugs的修复。
# 切换到master分支
git checkout master
# 合并release分支到master
git merge --no-ff release-0.2.0
# 推送到远程master仓库
git push origin master
# 打上release标签
git tag -a release-0.2.0
# 推送tag标签到远程仓库
git push origin --tags # push所有tag
# 或者单独推送某个tag,但是这样tag名称和release分支名称一样的话可能会有问题
git push origin [tagname]
为了是修改保持在release分支上,我们需要合并这些到develop分支上去,在Git上:
git checkout develop
git merge --no-ff release-0.2.0
git push origin develop
这个步骤可能会导致合并冲突(可能由于改变版本号更是如此)。如果是这样,修复它然后提交。
现在我们真正的完成了,这个release分支将被删除,因为我们不再需要它了。
$ git branch -d release-0.2.0
具体可以参考Git分支模型(master/hotfix/develop/feature/release)
完整的开发开源项目的流程
以starrocks为例
- 在githup上fork starroks的代码
- 克隆自己仓库的代码
至此,这就是在githup上对开源项目二次开发的完整流程# clone代码 git clone git@github.com:gujincheng/starrocks.git # 添加之前项目的remote git remote add upstream https://github.com/StarRocks/starrocks.git # 拉取远程项目要使用的tag git fetch upstream tag 3.2.6 ## 查看可用的tag git tag git checkout tags/3.2.6 # 在此tag基础上创建新的分支 git checkout -b digiwin-3.2.6 # 或者 git switch -c digiwin-3.2.6 # 切换到main分支 git checkout main # 查看git log,筛选出想要的commit # $ git log --grep="Fix incorrect schema id" # commit 65b9f73ed58bef10204624942280926adb473394 # Author: Alex Zhu <zhuming9011@gmail.com> # Date: Fri Apr 19 20:41:14 2024 +0800 # # [BugFix] Fix incorrect schema id (#44469) # # Signed-off-by: Alex Zhu <zhuming9011@gmail.com> # # commit 344a8216dbb04e0fef28b4740710d8fca089b2e6 # Author: Alex Zhu <zhuming9011@gmail.com> # Date: Fri Apr 19 09:53:14 2024 +0800 # # [BugFix] Fix incorrect schema id after upgrade (#44372) # # Signed-off-by: Alex Zhu <zhuming9011@gmail.com> # 筛选出commit id为344a8216dbb04e0fef28b4740710d8fca089b2e6 # 切换到digiwin-3.2.6分支 git checkout digiwin-3.2.6 # cherry-pick 该次commit到自己的分支 git cherry-pick 344a8216dbb04e0fef28b4740710d8fca089b2e6 # 把修改后的代码提交到远程仓库 git push origin digiwin-3.2.6
github-recovery-codes
6cd09-856c4
de70f-f0e80
3d2fd-ae5cb
027bf-ea90b
d2569-7e311
f2578-b157d
67727-abe55
07d68-c0711
52680-c67ee
ec680-a9a2b
75fb0-fe25a
f9cd2-04bbe
5b575-d048f
ef7ae-02e62
b5f36-a16b8
ec482-f1426
使用IDEA合并分支
通常情况下,我们会提交代码到远程分支,之后在gitlab的页面上提交merge请求,然后合并分支。但是,如果在页面上出现分支冲突的时候,再用页面往往就不如人意。此时借助命令行,或者idea效果会更好
假如现在有2个分支,snapshot-streaming-separate
和develop
,现在想要将snapshot-streaming-separate
分支合并到develop
分支,但是目前出现冲突,在web上操作提示失败
在IDEA上执行步骤如下:
- 切换到
snapshot-streaming-separate
分支 - 右键项目,选择Git -> Merge -> 选择origin/develop -> 选择merge
- 此时会出现冲突,然后在界面上选择使用我们的还是他们的,如果选择我们的,就是用当前分支去替代develop分支的内容。否则就是用develop替代当前分支的内容,这里我们选择我们的,然后提交
- 再切换到develop上,在选择分支的地方选择
snapshot-streaming-separate
,并右键,选择merge snapshot-streaming-separate into develop
- 然后选择push分支到远程分支即可
我感觉还可以这样:
- 切换到
develop
- 在选择分支的地方选择
snapshot-streaming-separate
,并右键,选择merge snapshot-streaming-separate into develop
- 此时应该会提示冲突,然后我们按照上面的方式选择我们的,解决冲突
- 最后提交应该就行了
- 然后选择push分支到远程分支即可