zoukankan      html  css  js  c++  java
  • GIT管理

    补充:

    推荐学习链接:https://git-scm.com/book/zh/v2

    一 常用GIT命令

    1 创建新分支(分支来源可以是另外一个分支名,或一个 tag 名称)

    git branch 新分支名 分支来源

    2 创建并切换到新分支(分支来源可以是另外一个分支名,或一个 tag 名称,或一个 commit id)

    git checkout -b 新分支名 分支来源

    3 删除分支

    git branch –d 分支名

    4 合并分支

    先切换到合并的目的分支

    git checkout dev

    再将待合并分支合并到当前分支

    git merge --no-ff feature-1.0.1

    5 查看 commit-id(即commit 的 hash 值)

    git log 或使用各种GIT GUI

    6 将另外一个分支的某个 commit的 代码改动应用到当前分支

    git cherry-pick commit-id

    7 打 tag 标签

    git tag 标签名 commit-id

    8 在当前分支提取标签 tag 对应的版本

    git checkout 标签名

    还原指定的提交版本:git revert -m 【要撤销的那条merge线的编号,通常从1开始计算】 【merge前的版本号】,如:git revert -m 1 0a43c4cbd5e0beeae1645b1fbf8b401db4b645d3

    推送还原后的代码到GIT中央仓库:git push

    撤销已还原的提交:git revert 【方法二撤销 merge 时提交的 commit 的版本号,这里是 0a43c4cbd5e0beeae1645b1fbf8b401db4b645d3 】

    9 revert & reset(很重要的两个操作)

     备注:个人认为,日常工作可以使用 TortoiseGit 代替使用命令。

    二 分支权限分配

    将 GIT 中央仓库的 dev 分支设成 default 分支,dev 分支和 master 分支设置为 protected 分支。

    每个部门指定一或两个同事为 master 角色,其他成员可给予 developer 角色。

    developer 角色:

    feature 和 release分支为 public 分支,由 developer 维护。

    master 角色:

    负责 dev 分支跟 master 分支的合并等操作;

    提测,上预发布,上线前,版本分支指定人对 feature, dev, release, master 分支的代码进行核对(可使用 beyond compare);

    上线后,基于 master 分支打 tag;设置 feature/release/hotfix 分支 protected 分支;

    需要了解各分支周期,合理分配版本号。

     三 分支策略

    master 分支:用于版本发布。

    dev 分支:用于做小改变提交或者从特性分支合并代码,可以方便的拉取新的提测分支。

    feature 分支:开发某个改动较大的特定功能,命名规则:feature/<版本号>,如 feature/1.0.0。

    release 分支:发布正式版本之前(合并到master之前),用于测试的一个较稳定版本,也是提测的版本,命名规则:release/<版本号>,如 release/1.0.0。

    hotfix 分支:修复软件发布之后出现的 bug (即master分支上出现的 bug),命名规则:hotfix/<bug-id>,如hotfix/TR1234。

    tag:上线后,基于master分支或 hotfix 分支打 tag ,保持跟线上代码一致。

     四 小技巧

    作为 master 角色,需要合理分配版本号,尽可能地减少冲突;需要经常合并代码和对比代码,下面是一些小技巧:

    1 记录各个版本的开发周期及分支情况(以下为wiki截图)

    2 批处理命令(bat命令)

    @echo off
    
    :: 批量操作的模块:
    :: project1
    :: project2
    
    
    :: 配置项
    set topic=shop
    set modelList=project1,project2
    set urlPrefix=http://xxx/
    set urlSuffix=.git
    set lineSeparator=*****************************************
    
    
    :: --------------------------------------------------------
    @title %topic%的git命令批量操作
    :: 切换到根目录
    cd ../../
    
    :begin
    cls
    echo 1: 显示当前分支状态
    echo 2: pull到本地
    echo 3: 切换分支
    echo 4: 创建远程、本地分支,并切换
    echo 5: clone到本地
    echo 6: 查看%topic%的所有分支
    echo 7: 查看%topic%的所有tag
    echo 8: 基于master打tag
    echo 0: 退出
    echo.
    
    set /p choice=操作: 
    if %choice%==1 goto showCurrBranchStatus
    if %choice%==2 goto pull2Local
    if %choice%==3 goto switchBranch
    if %choice%==4 goto createAndCheckoutBranch
    if %choice%==5 goto clone2Local
    if %choice%==6 goto showAllBranch
    if %choice%==7 goto showAllTag
    if %choice%==8 goto createTagBaseonMaster
    if %choice%==0 (
    	echo bye ~.~ 
    	exit
    ) else (
    	echo error input ~.~
    )
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :showCurrBranchStatus
    @echo off
    set list="%modelList%"
    
    :loop4ShowCurrBranchStatus
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
    	cd %%i
        git status
    	cd ../
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4ShowCurrBranchStatus
    )
    
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :pull2Local
    @echo off
    set list="%modelList%"
    
    :loop4Pull2Local
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
    	cd %%i
        git pull
    	cd ../
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4Pull2Local
    )
    
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :switchBranch
    @echo off
    set /p branch=分支: 
    set list="%modelList%"
    
    :loop4SwitchBranch
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
    	cd %%i
        git checkout %branch%
    	cd ../
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4SwitchBranch
    )
    
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :createAndCheckoutBranch
    @echo off
    set /p originBranch=远程分支: 
    set /p newBranch=新分支: 
    set list="%modelList%"
    
    :loop4CreateAndCheckoutBranch
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
    	cd %%i
    	git checkout origin/%originBranch% -b %newBranch%
    	git push origin %newBranch%
    	git branch --set-upstream-to=origin/%newBranch%
    	cd ../
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4CreateAndCheckoutBranch
    )
    
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :clone2Local
    @echo off
    set list="%modelList%"
    
    :loop4Clone2Local
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
        git clone %urlPrefix%%%i%urlSuffix%
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4Clone2Local
    )
    
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :showAllBranch
    @echo off
    set list="%modelList%"
    
    :loop4ShowAllBranch
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
    	cd %%i
        git branch -a
    	cd ../
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4ShowAllBranch
    )
    
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :showAllTag
    @echo off
    set list="%modelList%"
    
    :loop4ShowAllTag
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
    	cd %%i
        git tag
    	cd ../
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4ShowAllTag
    )
    
    pause
    goto begin
    
    
    :: --------------------------------------------------------
    :createTagBaseonMaster
    @echo off
    set list="%modelList%"
    set /p tagName=tag名称: 
    
    :loop4CreateTagBaseonMaster
    for /f "delims=,, tokens=1,*" %%i in (%list%) do (
    	echo %%i:
    	cd %%i
        git checkout master
    	git pull
    	git tag %tagName%
    	git push origin %tagName%
    	cd ../
    	echo %lineSeparator%
    	echo.
    	
        set list="%%j"
        goto loop4CreateTagBaseonMaster
    )
    
    pause
    goto begin
    

      

  • 相关阅读:
    HTML5 ViewPort 资料收集
    [ASP.NET 技术点滴] Jquery 前端验证
    [转帖]Asp.NET 弹出页面
    [转]ASP.NET 页生命周期概述
    C#时间转整型(时间戳),模仿php strtotime函数的部分功能
    [转]使用微软的官方类库CHSPinYinConv获得汉字拼音
    [转]ASP.NET数据库连接字符串总结
    gradle 生成 pom,引用mybatis-plus源代码到自己的工程中
    困扰的问题终于解决了-docker时区不正确的问题修改记
    mybatis plus3.1.0 热加载mapper
  • 原文地址:https://www.cnblogs.com/ken-jl/p/8371159.html
Copyright © 2011-2022 走看看