标签:# Git 原理详解及实用指南

Git 原理详解及实用指南 - merge,add,log

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 原理详解及实用指南 - 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 ~