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 @@
    -<C4><E3><CA>ǵ<DA>2<C3><FB><C2><F0>
    +你们是第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 系统中被编辑过。
相关推荐
玄斎2 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
清风一徐3 小时前
禅道从18.3升级到21.7.6版本
笔记
Jack___Xue3 小时前
LangChain实战快速入门笔记(六)--LangChain使用之Agent
笔记·langchain·unix
零度@4 小时前
SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)
数据库·笔记·sql
im_AMBER4 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
其美杰布-富贵-李5 小时前
HDF5文件学习笔记
数据结构·笔记·学习
d111111111d6 小时前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
静小谢6 小时前
前后台一起部署,vite配置笔记base\build
前端·javascript·笔记
ask_baidu7 小时前
Doris笔记
android·笔记
嗷嗷哦润橘_7 小时前
AI Agent学习:MetaGPT之我的工作
人工智能·学习·flask