git diff 命令浅析

git diff 命令浅析

以下内容来自GPT的chat

请向我介绍git diff命令的用法

git diff 是 Git 中用于比较不同版本之间的改动的一个非常重要的命令。它可以比较工作区、暂存区和提交历史中的差异,帮助开发者理解和查看代码的变化情况。

git diff 的基本用法

  1. 比较工作区和暂存区
    当你对文件进行修改但没有将其添加到暂存区时,git diff 会显示工作区中的改动与暂存区中的差异。

    git diff
    
    • 该命令会显示当前文件在工作区中的未暂存更改,和暂存区中已追踪文件的对比。
  2. 比较暂存区和最新的提交
    使用 git diff --stagedgit diff --cached 来查看已经暂存的更改与最后一次提交之间的差异。

    git diff --staged
    git diff --cached
    
    • 该命令展示了已经暂存(已添加到 git add)但还没有被提交的更改。
  3. 比较两个提交之间的差异
    你可以指定两个提交(commit)的哈希值或标签来比较它们之间的差异。

    git diff <commit1> <commit2>
    

    例如:

    git diff 1a2b3c4d 5f6g7h8i
    
    • 该命令会显示 commit1commit2 之间的所有差异。
  4. 比较文件在两个提交之间的差异
    如果你只想查看某个文件在两个提交之间的差异,可以在 git diff 后加上文件名。

    git diff <commit1> <commit2> -- <file>
    

    例如:

    git diff HEAD~1 HEAD -- myfile.txt
    
    • 该命令会显示 myfile.txt 在最近的提交和前一次提交之间的差异。
  5. 比较分支之间的差异
    git diff 还可以用于比较不同分支之间的差异。

    git diff <branch1> <branch2>
    

    例如:

    git diff main feature-branch
    
    • 该命令会显示 main 分支与 feature-branch 分支之间的差异。
  6. 比较文件或目录的差异
    你可以只查看某个文件或某个目录的差异,而不是整个项目的差异。

    git diff <file_or_directory>
    

    例如:

    git diff src/
    
    • 这会显示 src 目录下的文件的差异。
  7. 查看统计信息
    使用 --stat 参数,可以查看差异的统计信息,显示各个文件的修改行数等概况,而不显示具体的代码更改。

    git diff --stat
    

    输出示例:

    file1.txt | 10 +++++-----
    file2.txt | 5 ++++-
    2 files changed, 8 insertions(+), 7 deletions(-)
    
  8. 查看简短摘要
    使用 --summary 参数可以查看简短的摘要信息,例如文件的新增、删除、重命名等操作,而不显示具体的代码差异。

    git diff --summary
    
  9. 忽略空白字符的变化
    如果你的更改只涉及空格、缩进等空白字符,可以通过 -w 参数忽略这些差异。

    git diff -w
    

    这对于查看空白字符没有实际影响的代码变化时非常有用。

git diff 的高级用法

  1. 比较远程分支的差异
    你可以比较远程分支和本地分支之间的差异。例如:

    git diff origin/main
    
    • 该命令会比较本地当前分支和远程 main 分支的差异。
  2. 查看具体文件类型的差异
    使用 -- 来限定文件的后缀或名称,可以仅查看某种类型文件的差异。

    git diff HEAD -- '*.py'
    
    • 这个命令会查看 .py 文件(Python 文件)的差异。
  3. 与指定的父提交比较
    对于合并提交,git diff 可以比较不同的父提交。默认情况下,git diff 比较的是当前提交和第一个父提交。你可以使用 git diff <commit>^1git diff <commit>^2 来分别查看与第一个和第二个父提交的差异。

    例如:

    git diff HEAD^1
    
  4. 生成补丁文件
    如果你想将差异保存为一个补丁文件,可以使用以下命令生成补丁:

    git diff > changes.patch
    

    这会将当前未提交的更改保存到 changes.patch 文件中,稍后你可以用 git apply changes.patch 来重新应用这些改动。

总结

  • git diff 可以比较工作区、暂存区、不同提交、分支或特定文件之间的差异。
  • git diff --staged 查看已暂存但未提交的更改。
  • 你可以通过指定两个提交、分支或文件来比较不同版本之间的差异。
  • 你还可以使用参数 --stat--summary-w 等选项查看差异的统计信息、忽略空白字符等。

git diff 是 Git 中非常强大的命令,通过灵活使用各种参数,你可以高效地追踪和查看项目中的变化。

我知道被git add添加的改动属于暂存区,已经被commit的改动是否属于暂存区?

已经被 git commit 的改动不再属于暂存区,而是被永久记录到版本历史中。暂存区用于暂时存放已准备好提交的更改,而一旦执行了 git commit,这些更改就会从暂存区转移到 Git 的版本历史记录中,成为提交(commit)的一部分。

Git 的三个主要区域:

  1. 工作区(Working Directory):这是你实际编辑文件的地方。当你修改文件后,改动会首先体现在工作区中。

  2. 暂存区(Staging Area):通过 git add 命令,你将工作区的改动(文件的修改、添加或删除)放入暂存区,准备提交。暂存区是一个中间状态,保存着即将提交的更改。

  3. 版本库(Repository/Commit History):执行 git commit 后,暂存区的内容会被提交到 Git 的版本库(commit history)中,这些更改成为一个新的提交,并从暂存区中移除。

工作流程示例:

  1. 修改文件后,改动会出现在工作区中。
  2. 通过 git add 命令将更改添加到暂存区。
  3. 执行 git commit 后,这些改动被提交到 Git 历史记录中,成为不可更改的一个提交。

总结

  • 暂存区:是用来临时存放已经通过 git add 准备好提交的改动。
  • 提交后的改动:提交后,改动会从暂存区转移到版本库(历史记录)中,暂存区此时为空,等待新的改动进入。

本文作者:Gold_stein

本文链接:https://www.cnblogs.com/smartljy/p/18399390

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Gold_stein  阅读(352)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 逃离地面 RAD & 三浦透子
逃离地面 - RAD & 三浦透子
00:00 / 00:00
An audio error has occurred.

作词 : 野田洋次郎

作曲 : 野田洋次郎

空飛ぶ羽根と引き換えに 繋ぎ合う手を選んだ僕ら

それでも空に魅せられて 夢を重ねるのは罪か

夏は秋の背中を見て その顔を思い浮かべる

憧れなのか、恋なのか 叶わぬと知っていながら

重力が眠りにつく 1000年に一度の今日

太陽の死角に立ち 僕らこの星を出よう

彼が眼を覚ました時 連れ戻せない場所へ

「せーの」で大地を蹴って ここではない星へ

行こう

もう少しで運命の向こう もう少しで文明の向こう

もう少しで運命の向こう もう少しで

夢に僕らで帆を張って 来たるべき日のために夜を超え

いざ期待だけ満タンで あとはどうにかなるさと 肩を組んだ

怖くないわけない でも止まんない

ピンチの先回りしたって 僕らじゃしょうがない

僕らの恋が言う 声が言う

「行け」と言う