# GIT中的diff命令

# 常用命令

# git diff

git diff命令用来输出git仓库两个文件,两个分支或者两个commmit id等之间文件的差异。

直接使用git diff命令,将会输出本地还没有add/stage到仓库中的所有文件修改。

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e93e7aa..1744a58 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,5 +21,6 @@ include_directories(${CMAKE_SOURCE_DIR}/test/inc)
 include_directories(${CMAKE_SOURCE_DIR}/Zoo/inc)
 include_directories(${CMAKE_SOURCE_DIR}/IntelCvTutorial/include)
 
+# shared library
 add_subdirectory(test)
 add_subdirectory(app)
\ No newline at end of file

# git diff filename

这个命令会输出文件当前状态与其上次提交之间的发生的修改。

# git diff README.md
diff --git a/README.md b/README.md
index e0a5b22..73fcc36 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
 # basic_cplusplus_examples
 
-#### 介绍
-C++ trick 实例
+## 介绍
+
+### test
+
+包含一些`tutorial examples`的代码。
 
 #### 软件架构
 软件架构说明

# git diff branch_name

这个命令给出当前分支与branche_name分支最近一次commit_id之间的差异。

# git diff master 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e93e7aa..1744a58 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,5 +21,6 @@ include_directories(${CMAKE_SOURCE_DIR}/test/inc)
 include_directories(${CMAKE_SOURCE_DIR}/Zoo/inc)
 include_directories(${CMAKE_SOURCE_DIR}/IntelCvTutorial/include)
 
+# shared library
 add_subdirectory(test)
 add_subdirectory(app)
\ No newline at end of file
diff --git a/README.md b/README.md
index e0a5b22..73fcc36 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
 # basic_cplusplus_examples
 
-#### 介绍
-C++ trick 实例
+## 介绍
+
+### test
+
+包含一些`tutorial examples`的代码。
 
 #### 软件架构
 软件架构说明

# git diff --staged (or --cached) path/to/file

当使用git add将修改添加到缓冲区后,使用git diff --staged还能查到文件上所做的修改。

# git diff HEAD

使用这个文件可以同时查看使用git add后及本地未stage的所有修改,不包括未跟踪的文件。

# git diff HEAD 
diff --git a/README.md b/README.md
index e0a5b22..73fcc36 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
 # basic_cplusplus_examples
 
-#### 介绍
-C++ trick 实例
+## 介绍
+
+### test
+
+包含一些`tutorial examples`的代码。
 
 #### 软件架构
 软件架构说明

# git diff commit_id1 commit_id2

比较两个commit id之间的修改。

# git diff 4df24e4da3ce0c576e04aef68befa003d5560496 4941529d0c50e38247b77f317ec52a6e89678fda
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1744a58..e93e7aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,5 @@ include_directories(${CMAKE_SOURCE_DIR}/test/inc)
 include_directories(${CMAKE_SOURCE_DIR}/Zoo/inc)
 include_directories(${CMAKE_SOURCE_DIR}/IntelCvTutorial/include)
 
-# shared library
 add_subdirectory(test)
 add_subdirectory(app)
\ No newline at end of file

# 使用git diff创建和使用Git Patch补丁

# 创将Git Patch补丁

  • 先是将git diff的输出保存成Git Patch文件
  • 然后将修改舍弃,提交都可以
  • 使用git apply GIT_PATCH.patch应用修改
# git diff HEAD > readme.patch
# 生成文件 readme.patch
diff --git a/README.md b/README.md
index e0a5b22..73fcc36 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
 # basic_cplusplus_examples
 
-#### 介绍
-C++ trick 实例
+## 介绍
+
+### test
+
+包含一些`tutorial examples`的代码。
 
 #### 软件架构
 软件架构说明

# git apply readme.patch

像上面这样就完成了GIT_PATCH.patch的创建和应用,还有一些其他的操作。

# git apply GIT_PATCH.patch

git apply时可以跟一些参数来处理不同的情况。

  • --verbose-v,输出详细信息
  • --whitespace=fix,自动修复补丁文件中的空格,避免空格warning和缩进错误。
  • --check,在应用补丁之前,先进行检查
  • --stat,在应用补丁之前,先统计会插入几行/删除几行,修改几个文件
git apply --stat readme.patch
 README.md |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
  • --no-add,只应用patch中的删除操作
  • --exclude,应用补丁时排除指定文件
  • --include,应用补丁时包含指定文件

# reference