当前位置: > Linux服务器 > Git >

git学习笔记 三

时间:2014-10-30 11:58来源:linux.it.net.cn 作者:it
第七:包含多个分支和合并实现的实例
 
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)
------分隔线----------------------------