Git学习笔记

文章目录

    • [关于Git diff 操作的细节](#关于Git diff 操作的细节)

关于Git diff 操作的细节

复制代码
$ git diff HEAD^ HEAD
diff --git a/file1.txt b/file1.txt
index 58c9bdf..ee1cd12 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1 @@
-111
+<C4><E3><CA>ǵ<DA>1<C2><F0>
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..a68672c
--- /dev/null
+++ b/file3.txt
@@ -0,0 +1 @@
+<C4><E3><CA>ǵ<DA>2<C3><FB><C2><F0>

执行命令git diff HEAD^ HEAD(意思是比较前一commit版本和当前commit版本差别),输出两部分差别内容**(即两次版本比较一共有两个文件发生变动)**,其中第一部分差别内容解释如下:

  • git diff HEAD^ HEAD:这是你执行的 Git 命令,它比较当前分支的最新提交(HEAD)与其父提交(HEAD^)之间的差异,diff后第一个常用来表示父版本(会用-和---来表示)(老版本),第二个常用来表示新版本(会用+和+++来表示)。
  • diff --git a/file1.txt b/file1.txt:这行表示 Git 正在比较两个版本的文件 file1.txt。
  • index 58c9bdf...ee1cd12 100644:这行显示了两个版本文件在 Git 索引中的哈希值。58c9bdf 是父提交中的文件索引哈希值,ee1cd12 是当前提交中的文件索引哈希值。100644 是文件的权限模式,表示这是一个普通文件。
  • --- a/file1.txt:--- 这表示差异比较中的原始文件版本(HEAD^,即diff 后第一个文件),a/ 前缀表示它是 HEAD^ 指向的提交中的文件。
  • +++ b/file1.txt:+++ 这表示差异比较中的目标文件版本(HEAD,即diff后第二个文件),b/ 前缀表示它是当前 HEAD 指向的提交中的文件。
  • @@ -1 +1 @@:这表示差异发生在原始版本文件的第1行。-1 表示原始文件==(-表示的diff 后的第一个文件))的第1行,+1 表示新文件(+表示的diff 后的第二个文件)==的第1行。
  • -111:这表示原始文件的第1行包含文本 "111"。
  • +<C4><E3><CA>ǵ<DA>1<C2><F0>:这表示当前提交中的文件第1行现在包含一系列非打印字符。这些字符可能是由于编码问题或文件包含二进制数据。

第二部分内容差别解释:

  • diff --git a/file3.txt b/file3.txt:这行表明 Git 正在比较两个版本的 file3.txt 文件,a/ 和 b/ 是 Git 用来表示源文件和目标文件的前缀。

  • new file mode 100644:这表示 file3.txt 是一个新添加的文件,100644 是文件的权限模式。在 Git 中,文件权限模式 100644 表示一个普通文件。

  • index 0000000...a68672c:这行显示了文件在索引中的哈希值。0000000 表示文件之前的状态(这里是没有状态,因为这是一个新文件),a68672c 是文件当前的状态。

  • --- /dev/null:这表示差异比较中的原始文件是一个空文件(/dev/null),因为 file3.txt 是新添加的,所以它之前不存在。

  • +++ b/file3.txt:这表示差异比较中的目标文件是 b/file3.txt,即新添加的文件。

  • @@ -0,0 +1 @@:这是差异的开始,-0,0 表示原始文件没有行,+1 表示新文件有一行。

  • +<C4><E3><CA>ǵ<DA>2<C3><FB><C2><F0>:这是新文件中添加的内容。这些字符看起来像是二进制数据或非标准编码的文本,因为它们不是可见的 ASCII 字符。

    $ git diff HEAD^ HEAD
    diff --git a/file3.txt b/file3.txt
    index a68672c..224ed19 100644
    --- a/file3.txt
    +++ b/file3.txt
    @@ -1 +1,2 @@
    -ǵ2
    +你们是第3吗
    +你是啥玩意?
    \ No newline at end of file

解释:

  • git diff HEAD^ HEAD:这是你执行的 Git 命令,它比较当前分支的最新提交(HEAD)和它的前一个提交(HEAD^)之间的差异。
  • diff --git a/file3.txt b/file3.txt:这行表示 Git 正在比较 file3.txt 文件的两个版本。
  • index a68672c...224ed19 100644:这行显示了两个版本文件在 Git 索引中的哈希值。a68672c 是 HEAD^(父提交)中的文件索引哈希值,224ed19 是 HEAD(当前提交)中的文件索引哈希值。100644 是文件的权限模式,表示这是一个普通文件。
  • --- a/file3.txt 和 +++ b/file3.txt:这两个行分别表示差异比较中的原始文件版本和目标文件版本。a/ 和 b/ 是 Git 用来区分两个版本文件的前缀。
  • @@ -1 +1,2 @@:这表示差异发生在文件的第1行。在原始文件中,这是第1行;在新文件中,这表示第1行和第2行==(即新版本文档中有两行内容,分别对应之后的两个+)==。
  • -<C4><E3><CA>ǵ<DA>2<C3><FB><C2><F0>:这表示原始文件的第1行包含一系列非打印字符。这些字符看起来像二进制数据或特定编码的文本。
  • +你们是第3吗 和 +你是啥玩意?:这表示在当前提交中,原始的第1行被替换成了两行中文文本。
  • \ No newline at end of file:这行表示原始文件在最后一行后面没有换行符。在 Unix/Linux 系统中,文件通常以换行符结束,而在 Windows 系统中,文件以回车和换行符的组合(CRLF)结束。Git 会根据配置自动处理这些差异,但这个信息表明原始文件可能在 Windows 系统中被编辑过。
相关推荐
代码山河9 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
sbjdhjd9 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
释厄6239 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
海绵宝宝的月光宝盒12 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad
小嘉丶学长13 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
白山编程大哥13 小时前
接口幂等性是什么?如何设计?
笔记
ACP广源盛1392462567313 小时前
6 盘位存储扩展方案选型笔记:YLB3116 @ACP评估记录
笔记·硬件架构·硬件工程·国产芯片
小李不想当小白14 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
weixin_4481199416 小时前
Datawhale Jev Cookbook 202610 笔记3
笔记
姚瑞南16 小时前
【PRD】招投标商机雷达爬虫系统
人工智能·经验分享·笔记·爬虫·产品运营·产品经理