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 系统中被编辑过。
相关推荐
泡泡鱼(敲代码中)3 分钟前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
别动我齐刘海3 分钟前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
howard200515 分钟前
6.4 Git安装与配置
git·安装配置
Hotchip_MEMS2 小时前
传统咪头与MEMS硅麦:雾化器气流传感方案对比
人工智能·笔记·物联网·电脑·制造
志尊宝2 小时前
Vue3 零基础每日笔记(040):Vite 创建 Vue3 + TS 项目——企业标配从这一篇开始
笔记·vue·html·前端开发·软件开发
水云桐程序员2 小时前
量子力学概论,量子力学概念总结
笔记·科技·学习·量子计算
darin_ฅ( ̳• ◡ • ̳)ฅ12 小时前
【 Obsidian】2026版-Obsidian安装Automatic Table of Contents 插件一键生成文章目录
笔记
2401_850122043 小时前
航空、轨交、汽车线束防护有什么不同?三大行业的共性、差异与选型逻辑
经验分享·笔记·科技
志尊宝3 小时前
Vue3 零基础每日笔记(037):动手封装 useMouse 与 useWindowSize——事件监听的标准模板
前端·javascript·vue.js·笔记·html5
有范先生3 小时前
【无标题】
笔记