两个提交之间的Git差异,中间没有一些提交

时间:2014-03-21 01:35:19

标签: git

我有一个git日志,如:

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

我希望在提交834rhbf3..abasued1..之间进行不同的更改,而不包含其中包含的提交0123ruhw..2348fbvb..

我知道如何在两次提交之间获得整个差异,但有没有办法从某个范围中排除某些提交?

4 个答案:

答案 0 :(得分:2)

我想我终于明白了你。你可以使用它。 $ git revert --no-edit 2348fbvb $ git revert --no-edit 0123ruhw $ git diff 834rhbf3 HEAD


原始帖子

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

答案 1 :(得分:0)

如果我理解正确,你需要一个包含两个时间点之间变化的差异,除了作为特定两次提交的一部分发生的变化。

我不相信用一个命令就可以做到这一点;如果您以后的任何更改都依赖于被排除的提交,那么git就无法构建有意义的差异。

如果你想在没有修改分支的情况下拍摄,你可以做三个不同的差异:

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中的更改建立在两个排除的提交中的更改之上,您仍会将其中的部分视为上下文。

答案 2 :(得分:0)

一种间接方法,但可以达到目的:

  1. 使用所有现有提交创建分支B1。
  2. 使用您要保留的提交创建分支B2。

现在,对两个分支进行比较,如下所示:

const

答案 3 :(得分:-1)

这是一种非常规和蛮力的方法。

首先,为了安全起见,请在.git目录所在的根目录下制作整个项目的副本。

现在,使用此副本 ...

使用交互式rebase流程,例如git rebase -i HEAD~10

并实际删除您不想要的提交(通过删除代表这些提交的整行)并保存您的工作。

然后你就可以在没有提交的情况下对commitB执行git diff commitA。

然后删除此目录(rm -r),这样您就不会意外地将其推到任何地方!