Git合并相关命令细节

Git合并相关命令细节

合并相关命令

这里的合并指的是自动合并,是采用三路合并算法完成的。提前是存在第三方。
只有两个版本是无法自动合并的,因为无法知道以哪个版本为准。

所以合并时存在三方:

  1. 本地版本
  2. 远端版本
  3. 公共版本

这里列的命令都能进行自动合并时,只是细节上不同。

  • merge
  • push
  • pull
  • rebase
  • revert
  • stash
  • apply

其中merge, push, pull, rebase是类似的,都是对两个分支合并,从分支溯源到公共结点,再进行三路合并

Git合并相关命令细节

自动合并时,公共版本节点不直观的是revert, stash, apply下面章节进行描述。

revert

revert有点不一样,如果在顶端执行

git revert B 

相当于以B为祖先节点,将向A与D两个方向的分支合并.

Git合并相关命令细节

stash

这里主要描述其产生的补丁文件的index,这个是其能进行自动合并的基础。

git stash 与git diff产生的补丁是一样的

先从diff开始

对工作目录文件进行修改后,执行

git diff

diff --git a/Test.txt b/Test.txt
index 1b80f94..829de97 100644
--- a/Test.txt
+++ b/Test.txt
@@ -1,5 +1,6 @@
 Some text.
 Some text.
 Some text.
+Some comment.
 Some text.
-Some text.
+Another comment.

index 后面的两个hash (1b80f94,829de97) 其实对应的是前后两个文件 , 最后的"100644"是文件属性,不用理。

使用指令将这两个文件显示出来:

git show 1b80f94

Some text.
Some text.
Some text.
Some text.
Some text.

git show 829de97

fatal: ambiguous argument '829de97': unknown revision or path not in the working tree.

这个应该是git没有收录当前文件造成的。此时,执行

git stash

然后再将其显示出来,执行:

Git合并相关命令细节

git stash show的含义是显示最顶部的stash。-p即–patch,意思是以补丁的形式显示。

与git diff的结果是一样的,此时再执行

git show 829de97

Git合并相关命令细节

完全就是之前工作目录未收录的样子。

反过来,可以对工作目录的版本进行hash求值,判断是否与index的一样:

Git合并相关命令细节

结果是一样的。

apply

涉及合并是因为它能应用补丁,而且可以反向应用(-R)。

只要补丁中包含的index在仓库中,意味着有祖先版本与目标版本,就没有合并不了的补丁,无非就是手工处理冲突。

对乱码的说明

这两个汉字,其实是UTF-8 BOM与字母’S’的编码被当成简体中文显示造成的。以下是维基对UTF-8 BOM的描述:

UTF-8
The UTF-8 representation of the BOM is the (hexadecimal) byte sequence 0xEF,0xBB,0xBF. 

下面是工具对这两个汉字的解码与再编码结果:

Git合并相关命令细节

Git合并相关命令细节

相关命令

计算文件的hash值:

git hash-object <file>

显示hash的文件内容

git show <hash>

…(img-b0ZXVEnt-1610445224957)]

相关命令

计算文件的hash值:

git hash-object <file>

显示hash的文件内容

git show <hash>
上一篇:javascript中every()和some()方法用法解析


下一篇:cherrypy session 区分用户