在最后一次“拉”或“合并”之前引用 HEAD 的状态
Reference a the state of HEAD before the last `pull` or `merge`
我发现我经常这样做。
- 运行
git pull
或 git pull --rebase
查看标准输出以查看更改
From github.com:foo/bar
3d8749e..b795f99 master -> origin/master
复制并粘贴此版本范围到
git log -p 3d8749e..b795f99
我想知道是否有一种方法可以指定“HEAD
在最后一次拉取或合并之前的状态”,这样我就可以简单地总是 运行 相同的命令
git log -p HEAD@{before pull}..HEAD
总是使用 HEAD@{1}
很接近并且可能适用于 git pull
,但不适用于 git pull --rebase
,因为这会向 reflog 添加多个条目:
$ git reflog
4111cc6 (HEAD -> master) HEAD@{0}: rebase finished: returning to refs/heads/master
4111cc6 (HEAD -> master) HEAD@{1}: pull --rebase: A local commit
b795f99 (origin/master, origin/HEAD) HEAD@{2}: pull --rebase: checkout b795f9924503c05da91b08e0e9ad3ffb48229bc8
d3379e5 HEAD@{3}: commit: A local commit
一种替代方法是使用分支引用日志。 HEAD
reflog 在 rebase 期间获得多个条目,但分支 reflog 应该在最后获得一个。 (至少在我的测试中有效。)所以它不完全是 "one command that's always the same",而是
git diff master@{1}..master
更接近你想要的。
另一种选择是使用 time-based reflog 表示法。例如,如果您知道 HEAD
过去没有移动,比如 5 分钟,那么在 rebase 之后您可以立即说
git diff HEAD@{5.minutes.ago}..HEAD
而且只要在第一次更新到HEAD
后的5分钟内没有奇怪的slow-down,这应该就可以了。但当然,如果 rebase
导致冲突解决,可能会有这样的 slow-down,总的来说,这是一个 half-baked 解决方案,我提到它只是因为它可能 通常 使用命令之间的差异较小...
你可以记下合并前的系统时间,然后说
git diff HEAD@{10:25:03}
避免依赖变基时间。但现在您又要记录一个值以插入命令。
[update - 删除了我最初提到的一个选项,因为它并没有真正做正确的事情;今天上班感冒了,头有点晕。]
我发现我经常这样做。
- 运行
git pull
或git pull --rebase
查看标准输出以查看更改
From github.com:foo/bar 3d8749e..b795f99 master -> origin/master
复制并粘贴此版本范围到
git log -p 3d8749e..b795f99
我想知道是否有一种方法可以指定“HEAD
在最后一次拉取或合并之前的状态”,这样我就可以简单地总是 运行 相同的命令
git log -p HEAD@{before pull}..HEAD
总是使用 HEAD@{1}
很接近并且可能适用于 git pull
,但不适用于 git pull --rebase
,因为这会向 reflog 添加多个条目:
$ git reflog
4111cc6 (HEAD -> master) HEAD@{0}: rebase finished: returning to refs/heads/master
4111cc6 (HEAD -> master) HEAD@{1}: pull --rebase: A local commit
b795f99 (origin/master, origin/HEAD) HEAD@{2}: pull --rebase: checkout b795f9924503c05da91b08e0e9ad3ffb48229bc8
d3379e5 HEAD@{3}: commit: A local commit
一种替代方法是使用分支引用日志。 HEAD
reflog 在 rebase 期间获得多个条目,但分支 reflog 应该在最后获得一个。 (至少在我的测试中有效。)所以它不完全是 "one command that's always the same",而是
git diff master@{1}..master
更接近你想要的。
另一种选择是使用 time-based reflog 表示法。例如,如果您知道 HEAD
过去没有移动,比如 5 分钟,那么在 rebase 之后您可以立即说
git diff HEAD@{5.minutes.ago}..HEAD
而且只要在第一次更新到HEAD
后的5分钟内没有奇怪的slow-down,这应该就可以了。但当然,如果 rebase
导致冲突解决,可能会有这样的 slow-down,总的来说,这是一个 half-baked 解决方案,我提到它只是因为它可能 通常 使用命令之间的差异较小...
你可以记下合并前的系统时间,然后说
git diff HEAD@{10:25:03}
避免依赖变基时间。但现在您又要记录一个值以插入命令。
[update - 删除了我最初提到的一个选项,因为它并没有真正做正确的事情;今天上班感冒了,头有点晕。]