forked from dcxy/learngit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
WonderdchNote.txt
175 lines (95 loc) · 6.27 KB
/
WonderdchNote.txt
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
常用命令
Git 配置
git config --global
初始化Git
git init
添加文件到GIt仓库
添加: git add dir/files example:git add Readme.txt
提交: git commit -m "commit instruction(本次提交的说明)"
查看仓库当前状态
git status
查看上一次修改
git diff
版本回退
查看提交日志: git log / git log --pretty=oneline
版本回退: git reset --hard commit_id git reset --hard HEAD(HEAD当前版本,HEAD^上个版本,HEAD~100上一百个版本)
重返未来: git reflog 查看命令历史,然后在其中确定commit_id
撤销修改
撤销工作区修改: git checkout -- file example: git checkout -- Readme.txt
撤销暂存区修改: git reset HEAD file 然后 git checkout -- file
删除文件
删除本地文件: rm file 然后通过 git status 可以查看删除记录
撤销删除本地文件: git checkout -- file
从git 库删除: git rm file 然后 git commit
同步
上传
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
下载
第一次通过Clone
git clone [email protected]:michaelliao/gitskills.git
git clone [email protected]:UserName/FolderName.git
平时直接用Sync
分支操作
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
小结:
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
来源: <http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000>
其它分支
BUG 分支
修复bug时,可以另外建立一个bug分支,修改完后切换回master并合并分支,删除bug分支
去修复bug前,你要保存当前工作区,通过git stash 修复完成后返回工作区(git stash apply、git stash drop、)git stash pop
Feature分支
当为系统添加新功能时可以建立一个Feature分支
多人协作
git remote 查看远程库的信息
git remote -v显示更详细的信息
git push origin master将本地所有提交推送到远程库的master分支上
git push origin dev推送到远程库的dev分支上
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
小结
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
标签操作
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
打新标签 git tag <name> git tag -a v0.1 -m "version 0.1 released" 3628164 -a指定标签名,-m指定说明文字 3628164 指定commit id
查看标签git tag
查看标签信息git show <tagname>
小结
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
其它操作
git log 之后按q键返回正常模式
查看commit id:git log --pretty=oneline --abbrev-commit
当出现分支合并问题后,可以用下面这句查看分支合并图:git log --graph --pretty=oneline --abbrev-commit