我发现我经常这样做。
git pull
或git pull --rebase
查看标准输出以查看更改
From github.com:foo/bar
3d8749e..b795f99 master -> origin/master
复制'n'将此版本范围粘贴到
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
答案 0 :(得分:2)
另一种方法是使用分支reflog。 HEAD
reflog在rebase期间获取多个条目,但是分支reflog应该在结尾处获得一个。 (至少在我的测试中起作用。)所以它并不完全是“一个总是相同的命令”,但是
git diff master@{1}..master
更接近你想要的。
另一种选择是使用基于时间的reflog表示法。例如,如果您知道HEAD
过去没有移动过,比如说5分钟,那么就可以在改造之后立即说出
git diff HEAD@{5.minutes.ago}..HEAD
并且只要在第一次更新HEAD
后5分钟内没有任何奇怪的减速,这应该没问题。但是当然如果rebase
导致冲突解决,可能会有这么慢,总的来说这是一个半生不熟的解决方案,我之所以提到它只是因为它可能 usuall 命令之间的差异较小......
您可以在合并之前记下系统时间,并说出
git diff HEAD@{10:25:03}
以避免取决于rebase时间。但是现在你又回到录制一个值来插入命令。
[ update - 删除了我最初提到的一个选项,因为它并没有真正做到正确的事情;今天感冒了,头脑有点模糊。]