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

  

 

posted @   ken-jl  阅读(198)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示