Git合并相关命令细节

Git合并相关命令细节

合并相关命令

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

所以合并时存在三方:

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

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

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

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

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

revert

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

git revert B 

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

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 stash show的含义是显示最顶部的stash。-p即–patch,意思是以补丁的形式显示。

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

git show 829de97

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

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

结果是一样的。

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. 

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

相关命令

计算文件的hash值:

git hash-object <file>

显示hash的文件内容

git show <hash>

…(img-b0ZXVEnt-1610445224957)]

相关命令

计算文件的hash值:

git hash-object <file>

显示hash的文件内容

git show <hash>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值