git diff
- 格式
git diff commitA commitB
- 可以是commit的hash值
- 也可使HEAD,HEAD~3等
git diff branch1 branch2
- 比较不同分支差异
git diff fileName
- 比较暂存区和工作区
- 只有通过 git add 跟踪过的文件才能用git diff
git diff --cached
- 比较暂存区和版本库差异
git diff HEAD
- 比较以被跟踪的工作区和版本库的差异
- 输出解析
- 每一个变更文件作为一个段落,以 “diff --git a/file b/file” 开头,表示 a 版本的 file 文件和 b 版本的 file 文件进行比对。
- 每一个变更文件(如果涉及到内容的修改)可以有一个或多个的变更段落,每个变更段落以 “@@ -beginline,totalline +beginline,totalline @@” 开头。其中 beginline 表示修改开始于第几行,totalline 表示这一段修改涉及的总行数。“-”表示 a 版本,“+”表示 b 版本。变更段落中绿色且以“+”开始的表示新增的内容,红色且以“-”开始的表示删除的内容。
- 生成补丁
- 格式
git diff commitA [commitB] > patchName
- 如果commitB是当前分支的最后一次commit,可以省略
- 参数
- -o path
- 输出到指定文件夹
- 默认为当前仓库目录
- -o path
- 输出文件名
- 输出的每一个补丁文件都以序号开头,从 1 开始,再使用了 commit message的第一行(如果 commit message 太长的话)作为文件名,后缀是 .patch
- 格式
- 应用补丁
- 检查补丁文件涉及的修改
git apply —stat patchName
- 查看补丁是否能够应用成功
git apply —check patchName
- 应用补丁
git apply patchName
git apply —reject patchName
- 把不冲突的补丁先打上,有冲突的生成.rej文件
- 检查补丁文件涉及的修改
diff
-
格式
diff [options] old new
- File1 File2
- 比较两个文本文件
- Dir1 Dir2
- 比较目录下的同名文本文件
- 以及列出只在其中一个目录中出现的文件名
- File Dir
- 比较目录中的同名文件
- File1 File2
-
参数
- 不加参数仅显示修改部分
- -r 递归处理目录
- -N 将缺失文件当空白文件
- -y 并排显示新老文件
- 不可与-u同用
- -u 修改部分用±表示,否则为共有部分
- -q 仅判断文件是否不同
- -w 忽略空白符
-
输出
- 不加参数的输出格式
- 数字[a/c/d]数字
- 数字表示文件变动的行数
- 3表示第三行
- 3,6表示3到6行
- a表示文件2比文件1增加
- c表示该行内容变动
- d表示文件2比文件1删除
- -y并排输出格式
- "|"表示前后2个文件内容有不同
- "<"表示后面文件比前面文件少了1行内容
- ">"表示后面文件比前面文件多了1行内容
- 不加参数的输出格式
patch
- 格式
patch [option] originfile -i patchfile
- 用patchfile给originfile打补丁
- 参数
- -i 指定补丁文件
- -o 输出到指定文件而不是直接覆盖originfile
- -R 撤销补丁
- 生成patch
- diff -u oldFile newFile > patchFile