merge
git merge就是合并,指定一个 commit 或者 branch,将其合并到当前 branch 或 commit 来。
从 目标commit 和 当前commit 的分叉点起,将 目标commit 上的 所有commit 一并合并到 当前commit,并自动生成一个新的commit。
图 - git merge 示意图
特殊情况,如何处理
放弃合并
当前处于解决冲突的中间状态, 通过 git merge --abort 取消合并,回到merge之前的状态。
HEAD领先于当前commit
即合并之前的commit,这是一个无意义操作,Git什么也不会做。空merge。
HEAD落后于当前commit(快速前移)
在没有其它分支的情况下,Git会把HEAD指向的branch移动到目标commit。
当前在HEAD指向master分支,执行 git merge feature1 后的操作如下图所示:
图 - 合并领先于HEAD的commit
专有名词 - (快速前移)
在 git pull 经常出现,比如当前master分支本地没有更新,同事推送了新的commit到远程仓库,那么在执行 git pull 时,目标commit(远程仓库最新commit) 领先于 当前commit(本地commit),HEAD会携带本地master分支快速前移。
图 - git pull 实现原理
add
git add 添加的是文件改动,而不是文件。
log
git log -p[--patch] 查看具体到每个commit的改动细节。
git log --stat 查看每个commit改动的文件。
git show [commitId] [filePath] 查看当前commit的改动细节(精确到文件)。
对比
git diff 查看当前工作区与暂存区的区别。
git diff --staged[--cached] 查看当前暂存区与上一条commit的区别。
git diff HEAD 查看当前工作区与上一条commit的区别。
本章命令总结
git merge commit/branch 合并某个提交或分支
git merge --abort 放弃当前合并
git add . 添加某个文件改动到git暂存区
git log 的详细操作 git log
引用声明
本文内容来自掘金小册-Git 原理详解及实用指南的学习笔记内容,图片等均来自原作者。此处只作为笔记记录。
请支持原作者
Read More ~
标签:#
Git 原理详解及实用指南
Git 原理详解及实用指南 - HEAD,branch,push
HEAD
HEAD永远指向当前commit,每个仓库只有一个HEAD,每次提交之后都会向前移动到最新的commit。
远程分支HEAD永远指向默认分支(master)。
HEAD是Git中独特的引用,它是唯一的。
Branch
也是一类引用,HEAD除了直接指向commit之外,也可以通过指向branch间接指向commit。
图 - HEAD通过Branch间接指向Commit
当HEAD指向branch,发生commit时,HEAD会带着branch一起移动。如下图(HEAD携带feature1一起移动。)
图 - HEAD移动示意图
Push
将当前 branch 提交到远程仓库,并将当前 branch 的所有 commit 也提交到远程分支。
push时,如果是远程仓库不存在的分支,需要指定名称,git push origin branch_name, 或者通过修改 git config 的 push.default 来指定推送时默认分支。
push之后上传分支,并不会上传 HEAD, 远程仓库的 HEAD 永远指向默认分支(master)
master
master是Git中默认的branch,它与其他branch的区别在于:
新建仓库中第一个commit会被master自动指向。
在git clone时,会自动checkout到master(HEAD指向master分支,间接指向master分支的commit)。
图 - 克隆远程仓库流程
branch的基本操作
创建: git branch 名称,或 git checkout -b 名称
切换:git checkout 名称
删除:git branch -d/-D 名称,-D强制删除
推送:git push [origin branch_name],将本地分支推送到远程仓库对应分支
本章命令总结
git log 查看提交日志
git branch branch的基本操作
git commit 提交代码到本地仓库
git checkout branch_name 切换分支
git clone origin_url 克隆远程仓库到本地仓库
总结
git branch、HEAD都是围绕着commit走的;
git push的本质是将 当前branch 位置的(commit)上传到远程仓库,并将它的commit一并提交。
HEAD,Branch都是引用,引用的本质就是一个字符串,可以是一个commit的SHA-1码,也可以是一个branch的branch名。
引用声明
本文内容来自掘金小册-Git 原理详解及实用指南的学习笔记内容,图片等均来自原作者。此处只作为笔记记录。
请支持原作者
Read More ~