我总是问自己一系列关于我创建的分支的问题,我还没有确定如何完成:
- 我在分支中更改了哪些文件?
- 我对分支所做的实际更改(差异)是什么?
- 我对分支所做的提交日志是什么?
现在我想如果弄清楚如何使用git cherry master <branchname>
. 有了这个,我可以逐个哈希并找出所有内容,但是如果您有很多提交,这可能会很耗时。请注意,我不想与 master 的当前状态进行比较。我认为关键是知道您创建分支的 master 的哈希值,但我不确定如何确定这一点。
要查找当前结帐与 master 分支的差异,
base=`git merge-base master HEAD`
echo $base
找出从那时起更改了哪些文件,
git diff --name-only $base HEAD
显示累积的差异
git diff $base HEAD
当您想描述整个提交系列时,您可以使用上面链接的答案 Gabriele Petronella 中的语法,它master..HEAD
是简写HEAD ^master
,意思是“所有可从 HEAD 访问的提交,但不包括可从 master 访问的提交”。缺少端点默认为 HEAD,所以你可以说git log --oneline master..
假设您从 分支master
,
1. 分支后哪些文件发生了变化?
git diff master...<branchname> --name-only
2. 自分支以来的完整差异是什么?
git diff master...<branchname>
3. 什么是分支后的提交日志?
git log master..<branchname>
您无需指定<branchname>
是否已将其签出(例如,git diff master...
)。
注意: git diff
需要三点...
和git log
双点..
才能获得您要求的行为。
有关点语法的说明,请参见:
对于更改的文件列表和实际差异,如果您知道要比较的 2 个提交,则更有意义。
如果您想查看 和 之间的差异START_SHA1
,END_SHA1
您可以这样做:
git diff START_SHA1 END_SHA1
如果你只想要文件列表,你可以这样做:
git diff --name-only START_SHA1 END_SHA1
如果您还想知道文件中的更改类型(如A
, M
, D
, C
, R
, U
),您可以执行以下操作:
git diff --name-status START_SHA1 END_SHA1