远程仓库
创建与合并分支
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。
HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支
master分支可以理解成一个单链表,而master是一个指针,指向这个链表的最末尾,而HEAD指向master,表明此时所在的分支是matser分支
每次提交,master都会往前移动一步,就像给链表尾插了一个新节点一样,master永远指向的是最后一个节点
创建分支的时候,比如dev,Git就会创建一个新的指针dev,指向master的相同提交,此时HEAD指向了dev,就表明此时是在dev分支上
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
假如我们在dev上的工作完成了,就可以把dev合并到master上,方法就是直接把master指向dev的当前提交,就完成了合并:
最后删掉分支,就相当于把指针删掉
#新建一个dev分支并切换到dev分支
git checkout -b dev
git add a.txt
git commit
git checkout master
git merge dev
git branch -d dev
git branch查看所有分支
git branch <name>创建分支
git checkout <name>切换分支
git checkout -b <name>创建一个新的指向当前HEAD的分支,并直接切换过去
git merge <name>合并指定分支到当前分支
git branch -d <name>删除分支
解决冲突
你切换到一个分支feature1上修改了readme.txt的内容,并add和commit了,然后又切回master分支,也修改了readme.txt的内容,也add并commit了,此时调用git merge feature1,就会出现冲突
$ 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.txtno changes added to commit (use "git add" and/or "git commit -a")
此时直接打开readme.txt,会发现有冲突,选择一个想保留的就行
然后再add、commit
用git log --graph命令可以看到分支合并图