其实所有git diff
s为承诺,成对:上面的比较abc000
中的树木/文件与def555
中的树木/文件相比较。例如如果def333
改变dir/file
但也有abc000
和def555
之间dir/file
没有改变(例如,在def333
的变化是由沿途的东西取消了),你可能看不到dir/file
在那里。
在一般情况下,尽管在def333
所做的更改都将在abc000
对一个在def555
比较版本时显示出来的方式加以改变dir/file
。所以你会大概看到这种变化。
最简单的方法获取显示“def555
如果def333
已被还原”看起来像什么的差异是做到这一点:创建一个树(在临时分支上)与更改恢复。为了与实际命名的分支做到这一点,你可能会做这样的事情:
git checkout def555 # by ID, so that you get a "detached HEAD"
git checkout -b temp-branch
git revert --no-edit def333
git diff [options] abc000
git checkout somebranch; git branch -D temp-branch
,如果你不希望一个临时分支是什么?那么,这是微不足道的:只是不要创建一个。如上获得“分离的头部”,如上所述进行恢复,然后git checkout somebranch
。没有临时分支可以删除,除了那个未命名的分支,git会警告你离开后面......这正是你想要的。
你也可以使用'revert --no-commit',那么你根本就不需要一个分支(或分离的头部),并且什么也不留下。 – Bergi
@Bergi:true(尽管你一旦完成就需要'git reset --hard'来清理工作树)。 – torek