第七:包含多个分支和合并实现的实例
1、出现合并冲突的实例
[root@localhost ~]# mkdir -p /git/branche
[root@localhost branche]# cp -rv ../wanyan/* . //偷懒一下
`../wanyan/README' -> `./README'
`../wanyan/lib' -> `./lib'
`../wanyan/lib/comment' -> `./lib/comment'
`../wanyan/lib/include' -> `./lib/include'
`../wanyan/lib/include/comment' -> `./lib/include/comment'
`../wanyan/lib/include/main.c' -> `./lib/include/main.c'
`../wanyan/lib/README' -> `./lib/README'
[root@localhost branche]# git init
Initialized empty Git repository in /git/branche/.git/
[root@localhost branche]# git add .
[root@localhost branche]# git commit -m "1st commit"
[master (root-commit) e9f37b6] 1st commit
5 files changed, 9 insertions(+), 0 deletions(-)
create mode 100644 README
create mode 100644 lib/README
create mode 100644 lib/comment
create mode 100644 lib/include/comment
create mode 100644 lib/include/main.c
[root@localhost branche]# cat .git/HEAD
ref: refs/heads/master
[root@localhost branche]# cat .git/refs/heads/master
e9f37b62445a7c855108cb00455c9922ea356c29
[root@localhost branche]# git cat-file -t e9f3
Commit
第一次改变:
[root@localhost branche]# vi lib/comment
include
change
the last change
[root@localhost branche]# git commit -a -m "2rd commit"
[master c2a876e] 2rd commit
1 files changed, 1 insertions(+), 0 deletions(-)
第二次改变:
[root@localhost branche]# vi README
just test!
another hang!
last hang
[root@localhost branche]# git commit -a -m "3rd commit"
[master f5febf9] 3rd commit
1 files changed, 1 insertions(+), 0 deletions(-)
创建分支
[root@localhost branche]# git branch laji
[root@localhost branche]# ll .git/refs/heads/
total 16
-rw-r--r-- 1 root root 41 Nov 27 05:19 laji
-rw-r--r-- 1 root root 41 Nov 27 05:18 master
[root@localhost branche]# cat .git/refs/heads/laji //以下可以看出指向同一个commit
f5febf9e98c5dc2a1279a56c47642677fdea79ec
[root@localhost branche]# cat .git/refs/heads/master
f5febf9e98c5dc2a1279a56c47642677fdea79ec
[root@localhost branche]# git branch //查看当前使用的分支
laji
* master
[root@localhost branche]# git checkout laji //分支的切换
Switched to branch 'laji'
[root@localhost branche]# git branch
* laji
master
[root@localhost branche]# cat .git/HEAD
ref: refs/heads/laji
接下来演示的是分支之间的关系(互不影响),在分支laji下的修改对master分支没任何影响。
首先是在laji分支的下的修改
[root@localhost branche]# vi README
just test!
another hang!
last hang
change for branch
[root@localhost branche]# git commit -a -m "laji 4th commit"
[laji b72a123] laji 4th commit
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost branche]# cat README
just test!
another hang!
last hang
change for branch
[root@localhost branche]# cat .git/refs/heads/laji //commit不相同了,可见出现了分支
b72a1238f9962dd103c5839077026e7c342595ce
[root@localhost branche]# cat .git/refs/heads/master
f5febf9e98c5dc2a1279a56c47642677fdea79ec
然后切换到master分支观察下
[root@localhost branche]# git checkout master
Switched to branch 'master'
[root@localhost branche]# git branch
laji
* master
[root@localhost branche]# cat README
just test!
another hang!
last hang
接着创造分叉(就是对mater下做出进一步的git)
[root@localhost branche]# git branch
laji
* master
[root@localhost branche]# vi README
just test!
another hang!
last hang
The master change
[root@localhost branche]# git commit -a -m "master 4th commit"
[master bf7bf97] master 4th commit
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost branche]# cat README //列出和laji分支做对比
just test!
another hang!
last hang
The master change
[root@localhost branche]# git checkout laji
Switched to branch 'laji'
[root@localhost branche]# cat README
just test!
another hang!
last hang
change for branch
最后就是分支的合并(把laji 合并到master),这个合并可以是不同的文件之间的合并(因为合作开发项目时,所做的工作基本是很难相同的)
[root@localhost branche]# git branch
laji
* master
[root@localhost branche]# git merge laji
Auto-merging README
CONFLICT (content): Merge conflict in README
Automatic merge failed; fix conflicts and then commit the result.
[root@localhost branche]# cat README //因为是同一个文件的合并出现了冲突
just test!
another hang!
last hang
<<<<<<< HEAD
The master change
=======
change for branch
>>>>>>> laji
[root@localhost branche]# git branch
laji
*master
[root@localhost branche]# vi README
just test!
another hang!
last hang
The master change
change for branch
~
[root@localhost branche]# git add .
[root@localhost branche]# git commit "last commit"
这样就可以了,解决了冲突,提交成功。
[root@localhost branche]# git branch -D laji //删除没用的分支
Deleted branch laji (was b72a123).
2、不出现冲突的实例
[root@localhost other]# cd ..
[root@localhost git]# mkdir another
[root@localhost git]# cd another/
[root@localhost another]# vi a1
wanyan
~
[root@localhost another]# vi a2
ethnicity
[root@localhost another]# git init
Initialized empty Git repository in /git/another/.git/
[root@localhost another]# git add .
[root@localhost another]# git commit -m "1st commit"
[master (root-commit) f723f47] 1st commit
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 a1
create mode 100644 a2
[root@localhost another]# git branch laji
[root@localhost another]# git branch
laji
* master
[root@localhost another]# git checkout laji
Switched to branch 'laji'
[root@localhost another]# vi a1
wanyan
zhengjing
[root@localhost another]# git commit -a -m "laji 2nd commit"
[laji 05cda63] laji 2nd commit
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost another]# git checkout master
[root@localhost another]# vi a2
ethnicity
beta
[root@localhost another]# git commit -a -m "mater 3rd commit"
[master 1239b8e] mater 3rd commit
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost another]# cat a1
wanyan
[root@localhost another]# cat a2
ethnicity
beta
[root@localhost another]# git checkout laji
Switched to branch 'laji'
[root@localhost another]# cat a1
wanyan
zhengjing
[root@localhost another]# cat a2
ethnicity
[root@localhost another]# git checkout master
Switched to branch 'master'
[root@localhost another]# git merge laji
Merge made by the 'recursive' strategy.
a1 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost another]# cat a1
wanyan
zhengjing
[root@localhost another]# cat a2
ethnicity
beta
[root@localhost another]# git branch -D laji //删除分支
Deleted branch laji (was 05cda63).
[root@localhost another]# git branch
* master
第八:仅有一个分支的合并实例
[root@localhost git]# mkdir other
[root@localhost git]# cd other/
[root@localhost other]# vim main
hello ethnicitybeta
[root@localhost other]# git init
Initialized empty Git repository in /git/other/.git/
[root@localhost other]# git add .
[root@localhost other]# git commit -m '1st commit'
[master (root-commit) 9ef10c3] 1st commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 main
[root@localhost other]# git branch wanyan
[root@localhost other]# git checkout wanyan
Switched to branch 'wanyan'
[root@localhost other]# git branch
master
*wanyan
[root@localhost other]# vi main
hello ethnicitybeta
wanyanzhenjiang
~
[root@localhost other]# git commit -a -m "wanyan 2nd commit"
[wanyan 96aa677] wanyan 2nd commit
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost other]# cat main
hello ethnicitybeta
wanyanzhenjiang
[root@localhost other]# git checkout master
Switched to branch 'master'
[root@localhost other]# git branch
* master
wanyan
[root@localhost other]# cat main
hello ethnicitybeta
[root@localhost other]# git checkout master
Switched to branch 'master'
[root@localhost other]# git merge wanyan
Updating 9ef10c3..96aa677
Fast-forward //表示被合并的分支并没有出现分叉
main | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost other]# cat main
hello ethnicitybeta
wanyanzhenjiang
实验结束
总结:之前有接触版本控制的概念,仅有的名词概念是svn,还没来得及做研究,这里接触了git感觉十分的好用,在这里做一个系统的学习记录下来,以备工作时使用,再次感谢小布老师的无私授课。
(责任编辑:IT) |