git小乌龟同步和拉取的区别
“提取”的含义是命令git fetch(获取),即从远程仓库抓取本地没有的修改;
“拉取”的含义是git fetch(获取)紧接着一个git merge(合并),对应git中的命令git pull,即从远程仓库抓取本地没有的修改并自动合并到远程分支
如何使用git merge 一系列的commits
git merge判定冲突的方法:
先寻找两个commit的公共祖先,比较同一个文件分别在ours和theirs下对于公共祖先的差异,然后合并这两组差异。如果双方同时修改了一处地方且修改内容不同,就判定为合并冲突,依次输出双方修改的内容。
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。最初 Git 的开发是为了辅助 Linux 内核开发的过程。
先来说说 git 所保存的对象。对于 git 来说, commits ,文件, branches 都是一些对象。 commits 保存的是一些文本文件之间 diff (只对文本文件来说)。所谓的 merge 就是把那些 diff 在某些 commit 点上面重播( replay)一次。
可是 git 的 merge 没有直接 merge 一系列 commits 的功能。对于一个 commit ,我们可以使用 cherry-pick 来把那个 commit replay 到其它 commit 点上面。对于一系列的 commit ,这样做很麻烦,假如发生冲突麻烦更加大,你必须记住在 replay 到哪个 commit 的时候发生冲突,解决完之后还必须到跳过那个 commit 继续 cherry-pick。
git 的 rebase 能达到此目的。它和 merge 的不同之处在于 merge 是在历史记录分开的时候那个点开始重播的,而rebase 是保存好在 upstream 没有的 commits ,然后把那些 commits 重播在新的 base 点上。
假设要把 branches A 中 commit c-d (从 a-f ) merge 到 branch B 有两种方法:
方法一:首先用从 A 创建新的分支 A1 ,用 branch –f d 去除 commit e f ,然后用 rebase 去除 commit a , b(详情见 rebase --help )。然后把 branch B rebase 到 branch A1 上
方法二:首先从 A 创建新的分支 A1 ,用 branch –f d 去除 commit e f 。然后用 rebase –onto B b A1 把 A1“嫁接”( transplant )到 B 上。
方法一方法二的区别在于 c-d 应用的位置不同,方法一会出现在 B 的最前面;方法二相反。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!