git比较多个文件在两个分支下的差异

简介

一般工作中,我们每次代码测试通过后,代码需要合并到master分支,并将master分支的代码发布到线上。在合并回master过程,如果涉及到多团队并行开发时,可能会遇到代码合并冲突。在修复冲突过程中,可能将别人的代码误删或自己的代码被别人误删。这时我们如何快速判断,master分支上包含了本次开发功能的所有代码?本文主要介绍如何通过管道命令,快速地找出本次需求中开发过的文件在master分支和测试环境分支下的代码差异。

示例

git log

从上图可知,从master拉取新分支名为test,且该分支上有两个提交。

提交内容如下
commit1
commit2

commit1的提交内容有:创建了test1和test_dir/test2文件,并添加内容
commit2的提交内容有:修改test2文件的内容

如何找到一次需求开发中所有修改或新建的文件列表(即查找连续commit修改文件列表)

  • 将分支切换到当前的需求的开发分支
git checkout '分支名'
  • 找到分支拉取时的基点
HEAD 当前最新commit
HEAD^ 上一个commit
HEAD^^ 上上个commit
HEAD~N (N为整数) 前N个commit

也可以是具体的commit id值
  • 查找完整命令
git diff --name-only HEAD^^
or
git diff --name-only d4e1b3f03feec5bcd60508959dc70f29cfe1bc41

# 结果
test1
test_dir/test2

过滤掉不关心的文件/文件夹

git diff --name-only [HEAD or commit id] | grep -v [要过滤的文件名/文件夹名]

例: git diff --name-only HEAD^^|grep -v test_dir
结果
test1

比较某文件在两个分支下的差异

git diff 分支1名 分支2名 文件名

例: 
git diff test origin/master test1

diff --git a/test1 b/test1
deleted file mode 100644
index 58c9bdf..0000000
--- a/test1
+++ /dev/null
@@ -1 +0,0 @@
-111

某期需求涉及到多个文件比较

git diff --name-only HEAD^^|grep -v test_dir |xargs git diff test master

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注