0%

git使用笔记

本文主要包括:

  • 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为例

  1. 在githup上fork starroks的代码
  2. 克隆自己仓库的代码
    # 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
    至此,这就是在githup上对开源项目二次开发的完整流程

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