Git在中间没有提交的两个提交之间执行diff

ni65a41a  于 2023-02-07  发布在  Git
关注(0)|答案(4)|浏览(125)

我有一个git日志:

commit: abasued1..
commit: jsdiq7di..
commit: 2348fbvb..
commit: 0123ruhw..
commit: 9chvef87..
commit: 834rhbf3..

我想要一个834rhbf3..abasued1..之间的更改差异,但不包括0123ruhw..2348fbvb..
我知道如何获得两个提交之间的全部差异,但是有没有办法从一个范围中排除某些提交?

lnxxn5zx

lnxxn5zx1#

如果我理解正确的话,您需要一个包含两个时间点之间的更改的diff,除了作为特定两次提交的一部分发生的更改。
我不相信有一种方法可以用一个命令来完成它;如果你后来的修改依赖于被排除的提交,git就不能构造一个有意义的diff。
如果你想给予一下而不修改你的分支,你可以做三个不同的比较:

git diff 834rhbf3 9chvef87   # changes made in 9chvef87
git diff 2348fbvb jsdiq7di   # changes made in jsdiq7di
git diff jsdiq7di abasued1   # changes made in abasued1

请注意,如果abasued1jsdiq7di中的更改构建在两个被排除的提交中的更改之上,您仍然会看到它们的一部分作为上下文。

rnmwe5a2

rnmwe5a22#

我想我终于了解你了你可以用这个

原职位

也许我误解了你的意思,但是你试过git diff 834rhbf3 abasued1吗?参见here

xuo3flqw

xuo3flqw3#

间接方式,但服务于目的:

1.用所有现有的提交创建分支B1。
1.创建分支B2,包含你想要保留的提交。
现在,对这两个分支进行比较,如下所示:

git diff B1..B2
rpppsulh

rpppsulh4#

这里有一个非传统的蛮力方法。
首先,为了安全起见,在.git目录所在的根目录下复制整个项目。
现在,使用这个 * 副本 *...
使用交互式变基过程,例如git rebase -i HEAD~10
删除你不想要的提交(通过删除代表这些提交的整行)并保存你的工作。
然后您就可以执行commitA到commitB的git diff操作,而不会在其间执行提交。
然后删除这个目录(rm -r),这样你就不会不小心把它推到任何地方!

相关问题