2 git 提交之间的差异,但包含在第三次提交中
Diff between 2 git commits except contained in 3rd commit
有没有办法让 meld
+ git
显示 2 git 次提交之间发生的更改,但排除第 3 次提交中引入的更改?用例是查看当前提交与 3 向合并之前完成的某些提交有多少不同。
我有一个 hacky 的方法来做到这一点。
警告:在使用下面的单行之前,最好commit/backup所有未提交的更改。这个单行试图隐藏和恢复您的更改。但它仍然可能在 repo 中引入一些混乱(新文件)或者可能包含一些错误
下面的代码显示了 FIRST_COMMIT
和 SECOND_COMMIT
之间的区别,除了 MERGE_COMMIT
中另一个分支引入的其他文件的更改。您应该将环境变量 FIRST_COMMIT
、SECOND_COMMIT
和 MERGE_COMMIT
设置为适当的值。
FIRST_COMMIT=866dfa2a7
MERGE_COMMIT=94b195989
SECOND_COMMIT=0fc856fd9
git stash ; \
git checkout $FIRST_COMMIT ; \
git ls $MERGE_COMMIT..$SECOND_COMMIT | sort | \
uniq | \
xargs -L 1 git checkout $SECOND_COMMIT -- ; \
git difftool -d $FIRST_COMMIT ; \
git stash && git stash drop ; \
git stash apply
这个单线的作用:
- 将本地未提交的更改放入 git
stash
- 在
FIRST_COMMIT
检查代码状态
- 获取在
MERGE_COMMIT
和 SECOND_COMMIT
更改的所有文件以及它们之间的所有修订
- 上一步中的每个文件都重置为
SECOND_COMMIT
时的状态
- 使用您为 git 配置的差异工具显示差异。差异将在
FIRST_COMMIT
和 SECOND_COMMIT
之间,除了 MERGE_COMMIT
中另一个分支引入的其他文件的更改。上一句的意思是,如果某个文件在 SECOND_COMMIT
和 MERGE_COMMIT
中都被修改,则所有更改都将出现在 diff 中。很难避免。
- 退出 diff 工具后,git 将删除临时更改,并检查您一直在处理的分支。
- 之后,将应用来自 git 存储的更改。
根据您喜欢的 git 工作流程,您可以决定从上面的单个班轮中删除 git 隐藏调用
有没有办法让 meld
+ git
显示 2 git 次提交之间发生的更改,但排除第 3 次提交中引入的更改?用例是查看当前提交与 3 向合并之前完成的某些提交有多少不同。
我有一个 hacky 的方法来做到这一点。
警告:在使用下面的单行之前,最好commit/backup所有未提交的更改。这个单行试图隐藏和恢复您的更改。但它仍然可能在 repo 中引入一些混乱(新文件)或者可能包含一些错误
下面的代码显示了 FIRST_COMMIT
和 SECOND_COMMIT
之间的区别,除了 MERGE_COMMIT
中另一个分支引入的其他文件的更改。您应该将环境变量 FIRST_COMMIT
、SECOND_COMMIT
和 MERGE_COMMIT
设置为适当的值。
FIRST_COMMIT=866dfa2a7
MERGE_COMMIT=94b195989
SECOND_COMMIT=0fc856fd9
git stash ; \
git checkout $FIRST_COMMIT ; \
git ls $MERGE_COMMIT..$SECOND_COMMIT | sort | \
uniq | \
xargs -L 1 git checkout $SECOND_COMMIT -- ; \
git difftool -d $FIRST_COMMIT ; \
git stash && git stash drop ; \
git stash apply
这个单线的作用:
- 将本地未提交的更改放入 git
stash
- 在
FIRST_COMMIT
检查代码状态
- 获取在
MERGE_COMMIT
和SECOND_COMMIT
更改的所有文件以及它们之间的所有修订 - 上一步中的每个文件都重置为
SECOND_COMMIT
时的状态
- 使用您为 git 配置的差异工具显示差异。差异将在
FIRST_COMMIT
和SECOND_COMMIT
之间,除了MERGE_COMMIT
中另一个分支引入的其他文件的更改。上一句的意思是,如果某个文件在SECOND_COMMIT
和MERGE_COMMIT
中都被修改,则所有更改都将出现在 diff 中。很难避免。 - 退出 diff 工具后,git 将删除临时更改,并检查您一直在处理的分支。
- 之后,将应用来自 git 存储的更改。
根据您喜欢的 git 工作流程,您可以决定从上面的单个班轮中删除 git 隐藏调用