赞
踩
在版本回退里,我们已经知道,每次提交,Git都把他们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。
一开始的时候,master
分支是一条线,Git用master
指向最新的提交,再用HEAD
指向master
,就能确定当前分支,以及当前分支的提交点:
每次提交,master
分支都会向前移动一步,这样,随着你不断提交,master
分支的线也越来越长。
当我们创建新的分支dev时,Git新建了一个指针dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。
不过从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
假如我们在dev分支上把我们的工作完成了,就可以把dev合并到master上。怎么合并呢?
git checkout -b dev 创建dev分支并切换dev分支
git branch dev 创建dev分支
git checkout dev / git switch dev 切换到dev分支
git branch 查看当前分支
git merge dev 合并指定分支(dev)到当前分支(master)
git branch -d dev 删除dev分支
准备新的分支feature1,我们继续开发:
git branch feature1 创建新的分支feature1
git switch feature1 切换到feature1分支上
修改readme.txt文件的最后一行:
Creating a new branch is quick AND simple.
然后再feature1的分支上提交:
git add readme.txt
git commit -m “AND simple”
切换到master分支:
git checkout master
- $ git switch master
- Switched to branch 'master'
- // Git会提示我们当前master分支比远程master分支要超前一个提交。(此时说的就是feature1分支的那次add和commit)
- Your branch is ahead of 'origin/master' by 1 commit.
- (use "git push" to publish your local commits)
Git会提示我们当前master分支比远程master分支要超前一个提交。(此时说的就是feature1分支的那次add和commit)
重要的地方来了:我们在master分支上吧readme.txt的最后一行也修改了,改为:
Creating a new branch is quick & simple.
然后继续提交:
git add readme.txt
git commit -m “& simple”
此时在feauture1的分支上文件的最后一句话是: Creating a new branch is quick AND simple. 而在主分支master上文件的最后一句话是:Creating a newbranch is quick&simple。此时如果我们使用合并分支则会出现冲突问题。
现在master分支和feature1分支都对readme.txt文件做了修改,变成了这样:
这种情况下,git无法“快速合并”,合并就会有冲突,我们试试看:
- $ git merge feature1
- Auto-merging readme.txt
- CONFLICT (content): Merge conflict in readme.txt
- Automatic merge failed; fix conflicts and then commit the result.
Git告诉我们,readme.txt
文件存在冲突,必须手动解决冲突后再提交。
我们此时可以git status查看冲突情况。
- $ git status
- On branch master
- Your branch is ahead of 'origin/master' by 2 commits.
- (use "git push" to publish your local commits)
-
- You have unmerged paths.
- (fix conflicts and run "git commit")
- (use "git merge --abort" to abort the merge)
-
- Unmerged paths:
- (use "git add <file>..." to mark resolution)
-
- both modified: readme.txt
-
- no changes added to commit (use "git add" and/or "git commit -a")
果然冲突了!Git告诉我们,readme.txt
文件存在冲突,必须手动解决冲突后再提交。
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容,我们修改如下后保存:
Creating a new branch is quick and simple.
再提交:
- git add readme.txt
- git commit -m "conflict fixed"
- [master cf810e4] conflict fixed
现在,master
分支和feature1
分支变成了下图所示:
最后删除feature1分支
git branch -d feature1
我们发现其实冲突出现之后,只要从两个冲突的地方选择一方采取然后提交就可以了。可以在很多IDE(一般指集成开发环境)内部就可以很方便的查看冲突的地方,更清晰方便查看。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。