git - 从几个非后续提交中获取结果更改

时间:2015-07-02 10:50:11

标签: git git-commit

让我说我的git repo中有以下历史记录:

C (master)
x (origin/master)
B
x
A
x

A,B和C是我感兴趣的提交,而x是其他一些更改(可能超过1次提交)。我想知道提交A,B和C执行了什么结果更改,忽略了其他提交之间的任何其他更改。

是否可以这样做?

2 个答案:

答案 0 :(得分:2)

您可以重新定义这些更改以创建一个提交:

git rebase -i A^ // QWE^ means parent of QWE

在交互式重播中,您可以更改C,B,A的提交顺序。您还可以将B和A设置为“压缩”或“修复”,以便这些提交在一次提交时可见。

之后,如果您想查看提交A + B + C所做的更改,您可以简单地:

git log -p -1 A+B+C // -p means show diff, -1 means show just 1 commit

问题是在rebase期间你可能需要进行一些合并。

答案 1 :(得分:2)

您似乎希望对A-B-C中的更改进行代码审核。

我建议首先以分离的HEAD状态签出C,然后再进行rebase交互。

git checkout --detach C
git rebase -i A^

rebase交互式编辑器会显示类似这样的内容

pick A
pick x
pick B
pick x
pick C

删除x行并压缩其他提交。 E.g。

pick A
squash B
squash C

在rebase完成后,您的HEAD指向仅包含A-B-C更改的提交。

您可以使用

查看更改
git show HEAD

但请记住,您可能会遇到必须解决的冲突。如果例如,这可能发生commit C取决于您删除的x次提交之一中引入的更改。提交' B'同样相同。