我使用
git rebase -i origin/master
来压缩Git中一些提交,就像在ReinH.com中提到的那样。
在压缩了一些提交之后,是否有办法查看原始提交?能否获取提交的“diff”?我可以获得SHA吗?
如果可能的话,在运行git gc
之后,这是否仍然可行?
合并提交的目的是重写历史,用单个提交替换原来的提交。
话虽如此,在git中真正删除东西很难。获取这些提交的最简单方法是通过git reflog
。尝试 git reflog <branch>
来查看你rebase之前该分支的历史位置。
你应该能够找到交互式rebase之前分支末端的SHA1值。(如果该分支不存在,请尝试使用git reflog show
来查看HEAD
的reflog,也应该在那里,只需浏览更多的其他活动即可)。
一旦你有了SHA1值,你就可以使用git log -p
或gitk
查看提交并查看它们的差异。(如果你想对其进行大量操作,请在那里创建一个分支,这样你就不必一遍又一遍地复制粘贴SHA1值。)
运行git gc
后,如果距离你合并提交还没过太久,这些仍然是可能的。gc
只会清除一定时间内的不可达悬挂对象。
提交被认为是可达的,如果它们从任何reflog中可达,而reflog则需要 90天过期,因此你通常可以指望这些原始提交存留三个月。