1

我发现我经常这样做。

  • 运行git pullgit 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}is close 并且可能适用于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
4

1 回答 1

3

一种替代方法是使用分支 reflog。reflogHEAD在 rebase 期间获得多个条目,但分支 reflog 最后应该只获得一个。(至少在我的测试中有效。)所以它不完全是“一个始终相同的命令”,而是

git diff master@{1}..master

更接近你想要的。

另一种选择是使用基于时间的 reflog 表示法。例如,如果你知道HEAD过去没有移动,比如 5 分钟,那么在 rebase 之后你可以说

git diff HEAD@{5.minutes.ago}..HEAD

并且只要在第一次更新到 5 分钟后没有出现奇怪的减速HEAD,这应该没问题。但是当然,如​​果rebase导致冲突解决,可能会出现这样的放缓,总的来说,这是一个半生不熟的解决方案,我之所以提到它只是因为它通常可以在命令之间的变化较小的情况下工作......

您可以在合并之前记下系统时间,然后说

git diff HEAD@{10:25:03}

避免依赖于变基时间。但是现在您又要记录一个值以插入命令。

[更新- 删除了我最初提到的一个选项,因为它并没有真正做正确的事情;今天感冒了,头有点晕。]

于 2018-03-15T15:36:15.563 回答