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命令)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 | @ 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 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步