1
-
2
1
Study from:http://www.tcreator.info/webSchool/tools/git-3-branch.html
3
2
4
- �½���֧
3
+ 新建分支
5
4
git branch testing
6
5
7
- �л���֧
6
+ 切换分支
8
7
git checkout testing
9
8
git checkout master
10
9
11
10
git checkout -b iss53
12
- �൱��ִ���������������
11
+ 相当于执行下面这两条命令:
13
12
git branch iss53
14
13
git checkout iss53
15
14
16
- �½���������֧�������ڴ�֮ǰ����������ݴ������߹���Ŀ¼���Щ��û���ύ���ģ�������㼴������ķ�֧������ͻ�Ӷ���ֹ Git Ϊ���л���֧���л���֧��ʱ����ñ���һ�����Ĺ��������Ժ����ܼ����ƹ���������İ취���ֱ���� stashing �� commit amending����Ŀǰ�Ѿ��ύ�����е��ģ����Խ�������������ת����master ��֧����
15
+ 新建紧急修补分支(不过在此之前,留心你的暂存区或者工作目录里,那些还没有提交的修改,它会和你即将检出的分支产生冲突从而阻止 Git 为你切换分支。切换分支的时候最好保持一个清洁的工作区域。稍后会介绍几个绕过这种问题的办法(分别叫做 stashing 和 commit amending)。目前已经提交了所有的修改,所以接下来可以正常转换到master 分支:)
17
16
18
17
git checkout -b 'hotfix'
19
- �ĺ�ϲ����ȷ���������marge��
18
+ 修改后合并(先返回主干再marge)
20
19
git checkout master
21
20
git merge hotfix
22
- hotfix �����ʷʹ�����Ϳ���ɾ����
21
+ hotfix 完成历史使命,就可以删掉了
23
22
git branch -d hotfix
24
- ���˳��һ����֧����ȥ���Ե�����һ����֧�Ļ�����ô Git �ںϲ�����ʱ��ֻ��ذ�ָ�����ƣ���Ϊ���ֵ��ߵ���ʷ��֧�������κ���Ҫ����ķ��磬�������ֺϲ����̿��Գ�Ϊ����� Fast forward����
23
+ 如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进( Fast forward)。
25
24
26
25
27
26
$ git merge iss53
28
27
Auto-merging index.html
29
28
CONFLICT (content): Merge conflict in index.html
30
29
Automatic merge failed; fix conflicts and then commit the result.
31
- �����˳�ͻ������git status(����˵����������ֻ���������þ��� )
30
+ 产生了冲突,可以git status(逻辑上说,这种问题只能由人来裁决。 )
32
31
33
- �ڽ���������ļ�������г�ͻ������ git add �������DZ��Ϊ�ѽ��״̬����ע��ʵ���Ͼ�����һ�ο��ձ��浽�ݴ���������Ϊһ���ݴ棬�ͱ�ʾ��ͻ�Ѿ��������
32
+ 在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域。)。因为一旦暂存,就表示冲突已经解决。如
34
33
35
- ���������һ����ͼ�ν���Ĺ����������Щ���⣬��������git mergetool���������һ�����ӻ��ĺϲ����߲������������г�ͻ��
34
+ 如果你想用一个有图形界面的工具来解决这些问题,不妨运行git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突:
36
35
git mergetool
37
36
38
- ������һ�� git status ��ȷ�����г�ͻ���ѽ����
39
- ������������ˣ�����ȷ�����г�ͻ���ѽ����Ҳ���ǽ������ݴ������Ϳ����� git commit �������κϲ��ύ��
37
+ 再运行一次 git status 来确认所有冲突都已解决:
38
+ 如果觉得满意了,并且确认所有冲突都已解决,也就是进入了暂存区,就可以用 git commit 来完成这次合并提交。
40
39
41
40
42
41
43
42
44
43
45
44
46
45
47
- ��֧�Ĺ���
46
+ 分支的管理
48
47
49
- git branch ��������ܴ�����ɾ����֧����������κβ��������������ǰ���з�֧���嵥��
48
+ git branch 命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的清单:
50
49
git branch
51
- ע�⿴ master ��֧ǰ�� * �ַ�������ʾ��ǰ���ڵķ�֧��
50
+ 注意看 master 分支前的 * 字符:它表示当前所在的分支。
52
51
53
- ��Ҫ�鿴������֧���һ���ύ�������Ϣ������git branch -v��
52
+ 若要查看各个分支最后一个提交对象的信息,运行git branch -v:
54
53
git branch -v
55
54
56
- Ҫ�Ӹ��嵥��ɸѡ�����Ѿ�������δ���뵱ǰ��֧�ϲ��ķ�֧�������� --merge �� --no-merged ѡ� Git 1.5.6 ���ϰ汾����������git branch --merge �鿴��Щ��֧�ѱ����뵱ǰ��֧����ע��Ҳ����˵��Щ��֧�ǵ�ǰ��֧��ֱ�����Ρ�����
55
+ 要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 --merge 和 --no-merged 选项( Git 1.5.6 以上版本)。比如用git branch --merge 查看哪些分支已被并入当前分支(译注:也就是说哪些分支是当前分支的直接上游。):
57
56
58
57
git branch --merged
59
- һ����˵���б���û�� * �ķ�֧ͨ���������� git branch -d ��ɾ����ԭ��ܼ���Ȼ�Ѿ��������������Ĺ������ϵ���������֧��ɾ��Ҳ������ʧʲô��
58
+ 一般来说,列表中没有 * 的分支通常都可以用 git branch -d 来删掉。原因很简单,既然已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。
60
59
61
- ��������� git branch --no-merged �鿴��δ�ϲ��Ĺ�����
60
+ 另外可以用 git branch --no-merged 查看尚未合并的工作:
62
61
63
- ���ͱ��ط�֧
64
- �� serverfix �ķ�֧��Ҫ������һ������������ git push (Զ�ֿ̲��� ) (��֧��)���ͣ�
62
+ 推送本地分支
63
+ 如 serverfix 的分支需要和他人一起开发,可以运行 git push (远程仓库名 ) (分支名)推送:
65
64
git push origin serverfix
66
- Ҳ��������git push origin serverfix:serferfix
65
+ 也可以运行git push origin serverfix:serferfix
67
66
68
- �����Զ�̷�֧����awesomebranch�������� git push origin serverfix:awesomebranch ���������ݡ�
67
+ 若想把远程分支叫作awesomebranch,可以用 git push origin serverfix:awesomebranch 来推送数据。
69
68
70
- �������Ҫһ���Լ��� serverfix ��������������Զ�̷�֧�Ļ����Ϸֻ���һ���µķ�֧����
69
+ 如果再想要一份自己的 serverfix 来开发,可以在远程分支的基础上分化出一个新的分支来:
71
70
git checkout -b serverfix origin/serverfix
72
71
73
72
@@ -76,43 +75,43 @@ git checkout -b serverfix origin/serverfix
76
75
77
76
78
77
79
- ����Զ�̷�֧
78
+ 跟踪远程分支
80
79
81
- ��Զ�̷�֧ checkout �����ı��ط�֧����Ϊ_���ٷ�֧ (tracking branch)_��
80
+ 从远程分支 checkout 出来的本地分支,称为_跟踪分支 (tracking branch)_。
82
81
83
82
84
83
85
- ����������������趨Ϊ�������ٷ�֧�� git checkout -b [��֧�� ] [Զ���� ]/[��֧�� ]
84
+ 你可以随心所欲地设定为其它跟踪分支, git checkout -b [分支名 ] [远程名 ]/[分支名 ]
86
85
git checkout --track origin/serverfix
87
86
88
- git checkout -b sf origin/serverfix ����Ϊsf
87
+ git checkout -b sf origin/serverfix 更名为sf
89
88
90
89
91
90
92
91
93
- ɾ��Զ�̷�֧
92
+ 删除远程分支
94
93
git push origin :serverfix
95
- �ˣ��������ϵķ�֧û�ˡ�������ر�������һҳ����Ϊ��һ�����õ��Ǹ����������ܿ��ܻ���������������ַ��������������ķ�������ס���Dz���ǰ������ git push [Զ���� ] [���ط�֧ ]:[Զ�̷�֧] ������ʡ�� [���ط�֧]���Ǿ͵�������˵����������ȡ�հ�Ȼ��������[Զ�̷�֧]����
94
+ 咚!服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名 ] [本地分支 ]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。
96
95
97
- ������master��֧ʱɾ��develop��֧
96
+ 比如在master分支时删除develop分支
98
97
git push origin :develop
99
98
100
99
101
100
102
- ��֧���ܺ�
103
- rebase ����Ϳ�����һ����֧���ύ�ĸı��Ƶ���һ����֧���ط�һ�顣
101
+ 分支的衍合
102
+ rebase 命令,就可以把在一个分支里提交的改变移到另一个分支里重放一遍。
104
103
105
104
git checkout experiment
106
105
git rebase master
107
- �ѵ�ǰ��֧�ܺϣ��ܺ��ܲ���һ����Ϊ������ύ��ʷ������Ӳ�һ���ܺϹ��ķ�֧����ʷ��¼����������� ������·������Ķ�����һ�������Ⱥ���еģ�����ʵ��������ԭ����ͬʱ���з����ġ�
108
- ����ע��ʵ�����ǰѽ����֧����ͬ�������ɴ���֮���ͻ�����Σ���תΪ���ύ�����������������
106
+ 把当前分支衍合,衍合能产生一个更为整洁的提交历史。如果视察一个衍合过的分支的历史记录,看起来会更 清楚:仿佛所有修改都是在一根线上先后进行的,尽管实际上它们原本是同时并行发生的。
107
+ (译注:实际上是把解决分支补丁同最新主干代码之间冲突的责任,化转为由提交补丁的人来解决。)
109
108
110
- �ѻ��� server ��֧���� master ��֧�ĸı䣬���� server ֱ�ӷŵ�master ��֧������һ��
109
+ 把基于 server 分支而非 master 分支的改变,跳过 server 直接放到master 分支中重演一遍
111
110
git rebase --onto master server client
112
111
113
- ����ȡ�� client ��֧���ҳ� client ��֧�� server ��֧�Ĺ�ͬ����֮��ı仯��Ȼ���������master ������һ��
112
+ 即:取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在master 上重演一遍
114
113
115
- ֮��Ϳ��Կ��master��֧��
114
+ 之后就可以快进master分支了
116
115
git checkout master
117
116
git merge client
118
117
@@ -121,16 +120,8 @@ git rebase master server
121
120
122
121
123
122
124
- �ܺϵķ���
125
-
126
- ������ܺ�Ҳ����������ȱ��Ҫ����������һ����
127
- һ����֧�е��ύ�����������ֿ⣬��ǧ��Ҫ�Ը÷�֧�����ܺϲ�����
128
- �������ѭ����������ɣ��Ͳ�����������������Ⱥ�ڻ����㣬������Ѻͼ���Ҳ�ᳰЦ�㣬�����㡣
129
-
130
-
131
-
132
-
133
-
134
-
135
-
123
+ 衍合的风险
136
124
125
+ 奇妙的衍合也并非完美无缺,要用它得遵守一条准则:
126
+ 一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。
127
+ 如果你遵循这条金科玉律,就不会出差错。否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你。
0 commit comments