在Git中获取压缩提交的信息

28
我使用 git rebase -i origin/master 来压缩Git中一些提交,就像在ReinH.com中提到的那样。

在压缩了一些提交之后,是否有办法查看原始提交?能否获取提交的“diff”?我可以获得SHA吗?

如果可能的话,在运行git gc之后,这是否仍然可行?

1个回答

40

合并提交的目的是重写历史,用单个提交替换原来的提交。

话虽如此,在git中真正删除东西很难。获取这些提交的最简单方法是通过git reflog。尝试 git reflog <branch> 来查看你rebase之前该分支的历史位置。

你应该能够找到交互式rebase之前分支末端的SHA1值。(如果该分支不存在,请尝试使用git reflog show来查看HEAD的reflog,也应该在那里,只需浏览更多的其他活动即可)。

一旦你有了SHA1值,你就可以使用git log -pgitk查看提交并查看它们的差异。(如果你想对其进行大量操作,请在那里创建一个分支,这样你就不必一遍又一遍地复制粘贴SHA1值。)

运行git gc后,如果距离你合并提交还没过太久,这些仍然是可能的。gc只会清除一定时间内的不可达悬挂对象

提交被认为是可达的,如果它们从任何reflog中可达,而reflog则需要 90天过期,因此你通常可以指望这些原始提交存留三个月。


据我理解,从提交或其后代中删除所有标签,最终会导致垃圾收集器将其删除。 - Thorbjørn Ravn Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接