客户端并不只是提取最新版本的文件快照,而是把代码仓库完整地镜像下来。
在git中提交,会保存一个提交(commit)对象,该对象包含一个指向缓存内容快照的指针,包含本次提交的作者等相关的附属信息,包含零个或多个指向该提交对象的父对象指针:首次提交是没有直接祖先的,普通提交有一个祖先,由两个或多个分支合并产生的提交则由多个祖先。
git中的分支,其实本质上仅仅是个指向commit对象的可变指针。git会使用master作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的master分支,它在每次提交时都会自动向前移动。
创建一个新的分支: git branch [branchName]
创建了一个新的分支后不会自动切换到这个分支中,需要执行: git checkout [branchName]
也可以将创建新分支和切换到新分支合并成一条指令完成: git checkout -b [branchName]
现在要将hotfix的内容合并到master上来,需要执行:
git checkout master
git merge hotfix
合并时会出现Fast forward的提示,由于当前master分支所在的提交对象是要并入的hotfix分支的直接上游,git只需把master分支指针直接右移。这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进。
合并后,可以将hotfix分支删除: git branch -d hotfix
如果现在要将iss53合并到master分支上:
需要执行:
git checkout master
git merge iss53
由于当前master分支所指向的提交对象(C4)并不是iss53分支的直接祖先,git会用两个分支的末端(C4和C5)以及他们的共同祖先(C2)进行一次简单的三方合并计算。
如果在不同的分支中都修改了同一个文件的同一个部分,git就会无法干净地把两者合在一起。git作了合并,但没有提交,它会停下来等你解决冲突。要看哪些文件在合并的时候发生冲突,可以用git status来查阅。
任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。
可以将里面的内容进行人工修改。在解决所有文件里所有冲突后,运行git add将把它们标记为已解决状态。然后可以用git commit来完成合并提交。
git branch // 给出当前所有分支的清单,分支名字前的*表示当前所在的分支。
若要查看各个分支最后一个提交对象的信息,运行git branch -v。
要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用--merge和--no-merged选项。
原文:https://www.cnblogs.com/simpul/p/11415591.html