分支
因为Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照 。所以Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。
git checkout 分支创建
我们使用git checkout 来创建分支:
$ git checkout -b iss01
Switched to a new branch "iss01"
git checkout -b 后面的-b 表示我们创建了分支“iss01”并切换到这个分支。
git checkout -b iss01相当于下面的两条命令:
$ git branch iss01
$ git checkout iss01
git branch如果不加任何参数,会获取当前所有分支的列表。如果添加–merged 与 --no-merged ,可以过滤这个列表中已经合并或尚未合并到当前分支的分支。(切换分支除了用git branch,还可以用git switch)
git merge 分支合并
检出到你想合并的分支,然后运行git merge
$ git checkout master
Switched to branch 'master'
$ git merge iss01
git branch -d 删除分支
可能你将一个bug分支合并到了主分支,那么bug分支就不需要了,我们将它删除:
$ git branch -d iss01
如果你的分支还没有合并就需要丢弃的话,这个时候,使用-d是删除不了的。我们使用 -D将它强行删除
$ git branch -D iss01
合并冲突的产生与解决
如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。就会产生冲突。
$ git merge iss01
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件:
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a"
Git告诉我们,index.html文件存在冲突,必须手动解决冲突后再提交。
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改后再提交,就成功了!