远程仓库
创建与合并分支
每次提交,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.txt
no changes added to commit (use "git add" and/or "git commit -a")
此时直接打开readme.txt,会发现有冲突,选择一个想保留的就行
然后再add、commit
用git log --graph
命令可以看到分支合并图