简介
一般工作中,我们每次代码测试通过后,代码需要合并到master分支,并将master分支的代码发布到线上。在合并回master过程,如果涉及到多团队并行开发时,可能会遇到代码合并冲突。在修复冲突过程中,可能将别人的代码误删或自己的代码被别人误删。这时我们如何快速判断,master分支上包含了本次开发功能的所有代码?本文主要介绍如何通过管道命令,快速地找出本次需求中开发过的文件在master分支和测试环境分支下的代码差异。
示例
从上图可知,从master拉取新分支名为test,且该分支上有两个提交。
提交内容如下
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