-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgit.txt
More file actions
417 lines (174 loc) · 8.66 KB
/
git.txt
File metadata and controls
417 lines (174 loc) · 8.66 KB
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
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
使用git管理github远程仓库的步骤:
//对于新键一个全新的项目而言:
<1>创建版本库
cd e: ------进入e盘
mkdir own-create ------创建一个名为own-create的项目
cd own-create ------进入该项目
git init ------生成一个.git文件夹,把该项目变成git可以管理的仓库
git config --global user.email "xxxx@qq.com" ------想提交版本(git commit),需要在全局或本地设置用户邮箱 git commit
git config --global user.name "xxxxxx" ------想提交版本(git commit),需要在全局或本地设置用户名之后才能 git commit
git config --global user.email ------查看用户邮箱是否设置成功
git config --global user.name ------查看用户名是否设置成功
【可选】pwd ------显示当前项目位置
touch index.html ------在项目中新键index.html文件
git add index.html ------将index.html文件保存到暂存区
git add index.* ------将所有文件名为index的任意类型文件保存到暂存区
git add . ------将所有文件保存到暂存区
git commit -m '添加index.html' ------提交代码到本地仓库并用 -m 来添加注释 (前提是已经设置了用户邮箱和用户名)
git log ------打印所有提交过得版本(会显示版本号,提交的用户, 提交的日期,如果觉得现实的信息太多的或,可以使用git log --pretty=oneline 会将每个版本信息显示在一行)
在IDE中修改index.html并保存
git diff index.html ------当index.html更改过且没有提交到暂存区时 可使用该命令查看该文件修改了什内容
git status
git add .
git commit -m 'xxxxxxxx'
git log
<2>版本回退
再次在IDE中修改index.html并保存
git status ------查看状态,此时index.html处于modified(修改)状态
git add . ------将修改过的文件添加到暂存区
git commit -m 'xxxxx' ------提交到本地仓库
git log ------查看所有提交过得版本
//下面命令选其一:
git reset --hard HEAD^ ------回退到上一个版本
git reset --hard HEAD^^ ------回退到上上个版本
git reset --hard HEAD~100 ------回退到前100个版本
git log ------回退之前的版本已经没有了
但是现在我又想回退到最新版本了,怎么办?
git reflog ------该命令会显示所有的版本信息以及当前指针所在的版本
git reset --hard 版本号 ------利用版本号回退到最新版本或任意版本,最少复制7位版本号
【可选】cat index.html ------查看index.html文件(会在控制台打印index.html中所有内容)
<3>撤销修改
再再次在IDE中修改index.html并保存
git status ------查看状态 此时有修改过的index.html文件但没有提交到暂存区
git checkout -- index.html ------将该修改过但未提交到暂存区的index.html文件直接丢弃,恢复到当前版本对应的内容
git add . ------将修改过的index.html添加到暂存区
再再再次在IDE中修改index.html并保存
git checkout -- index.html ------ 此时index.html 已经放入暂存区了,接着又作了修改,如果撤销该次修改工作区中的index.html文件内容就回到了添加暂存区后的状态,也就是暂存区的index.html会替换掉工作区的index.html
git reset HEAD index.html ------将暂存区中的index.html恢复到工作区,此时工作区的index.html会被暂存区中的index.html替换
<4>删除文件
touch test.html ------新键test.html文件
git status ------此时会提示有新文件
git add test.html
git commit -m 'add test.html'
rm test.html -------删除文件
git status
git checkout -- test.html ------撤销删除的文件
<5> 远程仓库:如何添加远程库
ssh-keygen -t rsa -C "1073317235@qq.com" --------在本机生成秘钥
登录github>settings>SSH and GPG keys>点击 new SSH key>填写title和Key(是上一步生成的公钥id_rsa.pub)>点击Add SSH key>完成
然后在github上创建一个新的仓库>Create a new repository>新仓库名为test-git>复制该仓库地址:https://github.com/WebHero0544/test-git.git
在E:\workarea\test-git中打开命令行git bash
git remote add origin https://github.com/WebHero0544/test-git.git ------与远端github仓库建立连接
如果我们在创建远程仓库的时候添加了README.md或.ignore等文件,我们在后面关联仓库后,需要先执行如下命令:
git pull --rebase origin master
然后在pushd到远端,如下:
git push -u origin master ------将master分支内容推送到远端github仓库
<6> 远程仓库:如何从远程库克隆
在github上创建一个新的仓库>Create a new repository>新仓库名为test-clone-git>复制该仓库地址:https://github.com/WebHero0544/test-clone-git.git
在电脑上的某一个文件夹中打开git bash,执行命令:
git clone https://github.com/WebHero0544/test-clone-git.git
<7>怎么将本地git仓库提交到远端github仓库:
mkdir learn-git
cd learn-git
git init
在github上新建一个名为learn-git的仓库,并粘贴地址:https://github.com/WebHero0544/learn-git.git
git remote add origin https://github.com/WebHero0544/learn-git.git
git push -u origin master ------该处如果报错,说明远端github仓库已经有文件了(一般会是)README.md文件,需执行如下命令
git pull --rebase origin master ------本地仓库与远端github仓库进行文件合并后,再执行
git push -u origin master
<8>创建与合并分支
git checkout -b dev ------创建dev分支,并切换到该分支
git branch ------查看分支
git checkout master ------切换到master分支
git merge dev -----将dev分支合并到master分支
git status ------合并后的master,处于未提交状态
git add .
git commit -m '合并了dev的master分支'
git branch -d dev ------删除dev分支
<8>创建与合并分支 : 如何解决冲突
首先创造一个冲突:
在index.html空文件中添加一下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>branch,branch,branch,branch,branch</p>
</body>
</html>
在master分支下执行:
git add .
git commit -m '添加index.html内容'
git push ------提交
git checkout -b dev1 -------创建dev1分支,并切换到该分支
在index.html空文件中添加一下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>branch,branch,branch,branch,branch</p>
<p>dev1,dev1,dev1,dev1,dev1</p>
</body>
</html>
git add .
git commit -m '在dev1上向index.html添加内容'
然后切换至master分支:
git checkout master
在index.html空文件中添加一下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>branch,branch,branch,branch,branch</p>
<p>master,master,master,master,master</p>
</body>
</html>
git add .
git commit -m '在master上向index.html添加内容'
然后合并就会有冲突:
git merge dev1
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内容,>>>>>dev1 是指dev1上修改的内容,修改时将标记去掉
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式, 如下:
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
http://www.cnblogs.com/tugenhua0707/p/4050072.html上面的学习都是来自于该篇文章:还剩 多人协作 和 bug分支 未学
继续
<9>bug分支
在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。
比如我在开发中接到一个404 bug时候,我们可以创建一个issue-404分支来修复它,但是,当前的dev分支上的工作还没有提交(没有git commit),并不是我不想提交,而是工作进行到一半时候,我们还无法提交,比如我这个分支bug要2天完成,但是issue-404分支的bug修复需要5个小时内完成。怎么办呢?还好,Git还提供了一个stash功能,可以把当前工作现场(指dev分支) ”隐藏起来”,等以后恢复现场后继续工作,如下:
git stash -----隐藏工作现场(指当前的dev分支),专心修复bug
git checkout master ------切换到master分支
git checkout -b issue-404 ------创建issue-404分支,并切换到该分支, 在该分支上修复bug
假如入修复了bug
git add .
git commit -m '完成404 bug修复'
git checkout master ------切换到master分支
git merge --on-ff -m '修复404 bug' issue-404 ------将issue-404分支合并到master分支,完成该bug修复 ( --on-ff保留信息,以后能查看)
git branch -d issue-404 -------删除该分支
然后切换到dev分支继续干活
git checkout dev ----切换到dev分支
此时用git status查看工作区是干净的,那么我们工作现场去哪里呢?我们可以使用命令 git stash list来查看
回复工作区的方法有2:第一种git stash apply恢复,恢复后,stash内容并不删除,你需要使用命令git stash drop来删除;另一种方式是使用git stash pop,恢复的同时把stash内容也删除了。
<10>多人协作
git push origin master ------向远端推送master分支
git push origin dev ------向远端推送dev 分支
多人协作时,大家都会往master分支上推送各自的修改。现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆,新建一个目录名字叫learn-git1
现在我们的小伙伴要在dev分支上做开发,就必须把远程的origin的dev分支拉到本地来,于是可以使用命令创建本地dev分支:
git checkout –b dev origin/dev ------创建远程origin的dev分支到本地(只有master分支会拉到本地,dev分支需要创建并连接)
现在小伙伴们就可以在dev分支上做开发了,开发完成后把dev分支推送到远程库:
git push origin dev ------将在dev上的改动推送到远端dev上
每次在工作前要拉取最新的代码:
git pull
<11>查看git日志
git log ------- 使用git log --help查看日志命令的帮助文档
git log --pretty=oneline --abbrev-commit --all --graph
<12> 版本回退
git reset --hart comitId(版本号)
git reflog ------ 可以查看已经删除的提交记录