上一篇文章和大家分享了git对象的理解,git多层目录,这篇文件继续和大家讲解一下git的使用。
第七:包含多个分支和合并实现的实例
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 initInitialized 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 commit5 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/HEADref: refs/heads/master
[root@localhost branche]# cat .git/refs/heads/mastere9f37b62445a7c855108cb00455c9922ea356c29
[root@localhost branche]# git cat-file -t e9f3Commit
第一次改变:
[root@localhost branche]# vi lib/comment
include
change
the last change
[root@localhost branche]# git commit -a -m “2rd commit” [master c2a876e] 2rd commit1 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 commit1 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 //以下可以看出指向同一个commitf5febf9e98c5dc2a1279a56c47642677fdea79ec
[root@localhost branche]# cat .git/refs/heads/masterf5febf9e98c5dc2a1279a56c47642677fdea79ec
[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/HEADref: refs/heads/laji
接下来演示的是分支之间的关系(互不影响),在分支laji下的修改对master分支没任何影响。
首先是在laji分支的下的修改
[root@localhost branche]# vi READMEjust test!
another hang!
last hang
change for branch
[root@localhost branche]# git commit -a -m “laji 4th commit” [laji b72a123] laji 4th commit1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost branche]# cat READMEjust 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/masterf5febf9e98c5dc2a1279a56c47642677fdea79ec
然后切换到master分支观察下
[root@localhost branche]# git checkout masterSwitched to branch ‘master’
[root@localhost branche]# git branchlaji
* master
[root@localhost branche]# cat READMEjust test!
another hang!
last hang
接着创造分叉(就是对mater下做出进一步的git)
[root@localhost branche]# git branchlaji
* 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 commit1 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 lajiSwitched to branch ‘laji’
[root@localhost branche]# cat READMEjust test!
another hang!
last hang
change for branch
最后就是分支的合并(把laji 合并到master),这个合并可以是不同的文件之间的合并(因为合作开发项目时,所做的工作基本是很难相同的)
[root@localhost branche]# git branchlaji
* master
[root@localhost branche]# git merge lajiAuto-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
The master change
=======
change for branch
>>>>>>> laji
[root@localhost branche]# git branchlaji
*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 initInitialized 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 commit2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 a1
create mode 100644 a2
[root@localhost another]# git branch laji [root@localhost another]# git branchlaji
* master
[root@localhost another]# git checkout lajiSwitched to branch ‘laji’
[root@localhost another]# vi a1
wanyan
zhengjing
[root@localhost another]# git commit -a -m “laji 2nd commit” [laji 05cda63] laji 2nd commit1 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 commit1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost another]# cat a1wanyan
[root@localhost another]# cat a2ethnicity
beta
[root@localhost another]# git checkout lajiSwitched to branch ‘laji’
[root@localhost another]# cat a1wanyan
zhengjing
[root@localhost another]# cat a2ethnicity
[root@localhost another]# git checkout masterSwitched to branch ‘master’
[root@localhost another]# git merge lajiMerge made by the ‘recursive’ strategy.
a1 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost another]# cat a1wanyan
zhengjing
[root@localhost another]# cat a2ethnicity
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 mainhello ethnicitybeta
[root@localhost other]# git initInitialized 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 commit1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 main
[root@localhost other]# git branch wanyan [root@localhost other]# git checkout wanyanSwitched to branch ‘wanyan’
[root@localhost other]# git branchmaster
*wanyan
[root@localhost other]# vi main
hello ethnicitybeta
wanyanzhenjiang
~
[root@localhost other]# git commit -a -m “wanyan 2nd commit” [wanyan 96aa677] wanyan 2nd commit1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost other]# cat mainhello ethnicitybeta
wanyanzhenjiang
[root@localhost other]# git checkout masterSwitched to branch ‘master’
[root@localhost other]# git branch* master
wanyan
[root@localhost other]# cat mainhello ethnicitybeta
[root@localhost other]# git checkout masterSwitched to branch ‘master’
[root@localhost other]# git merge wanyanUpdating 9ef10c3..96aa677
Fast-forward //表示被合并的分支并没有出现分叉
main | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost other]# cat mainhello ethnicitybeta
wanyanzhenjiang
为各位朋友分享的相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多