我有一个git日志:
commit: abasued1.. commit: jsdiq7di.. commit: 2348fbvb.. commit: 0123ruhw.. commit: 9chvef87.. commit: 834rhbf3..
我想要一个834rhbf3..和abasued1..之间的更改差异,但不包括0123ruhw..和2348fbvb..。我知道如何获得两个提交之间的全部差异,但是有没有办法从一个范围中排除某些提交?
834rhbf3..
abasued1..
0123ruhw..
2348fbvb..
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
请注意,如果abasued1或jsdiq7di中的更改构建在两个被排除的提交中的更改之上,您仍然会看到它们的一部分作为上下文。
abasued1
jsdiq7di
rnmwe5a22#
我想我终于了解你了你可以用这个
原职位
也许我误解了你的意思,但是你试过git diff 834rhbf3 abasued1吗?参见here。
git diff 834rhbf3 abasued1
xuo3flqw3#
间接方式,但服务于目的:
1.用所有现有的提交创建分支B1。1.创建分支B2,包含你想要保留的提交。现在,对这两个分支进行比较,如下所示:
git diff B1..B2
rpppsulh4#
这里有一个非传统的蛮力方法。首先,为了安全起见,在.git目录所在的根目录下复制整个项目。现在,使用这个 * 副本 *...使用交互式变基过程,例如git rebase -i HEAD~10删除你不想要的提交(通过删除代表这些提交的整行)并保存你的工作。然后您就可以执行commitA到commitB的git diff操作,而不会在其间执行提交。然后删除这个目录(rm -r),这样你就不会不小心把它推到任何地方!
git rebase -i HEAD~10
git diff
rm -r
4条答案
按热度按时间lnxxn5zx1#
如果我理解正确的话,您需要一个包含两个时间点之间的更改的diff,除了作为特定两次提交的一部分发生的更改。
我不相信有一种方法可以用一个命令来完成它;如果你后来的修改依赖于被排除的提交,git就不能构造一个有意义的diff。
如果你想给予一下而不修改你的分支,你可以做三个不同的比较:
请注意,如果
abasued1
或jsdiq7di
中的更改构建在两个被排除的提交中的更改之上,您仍然会看到它们的一部分作为上下文。rnmwe5a22#
我想我终于了解你了你可以用这个
原职位
也许我误解了你的意思,但是你试过
git diff 834rhbf3 abasued1
吗?参见here。xuo3flqw3#
间接方式,但服务于目的:
1.用所有现有的提交创建分支B1。
1.创建分支B2,包含你想要保留的提交。
现在,对这两个分支进行比较,如下所示:
rpppsulh4#
这里有一个非传统的蛮力方法。
首先,为了安全起见,在.git目录所在的根目录下复制整个项目。
现在,使用这个 * 副本 *...
使用交互式变基过程,例如
git rebase -i HEAD~10
删除你不想要的提交(通过删除代表这些提交的整行)并保存你的工作。
然后您就可以执行commitA到commitB的
git diff
操作,而不会在其间执行提交。然后删除这个目录(
rm -r
),这样你就不会不小心把它推到任何地方!