33266


git で、 merge-base などでいろいろスクリプトで revision を計算していると、ある (機械的に計算された) revision と別の
revision の関係を、人目に確認したくなります。

revision をコミットの集合だと見立てて、このコミット集合としての差分が表示されるような、 diff のようなことができたらいいなと考えました。

例えば、 `git commit-diff A B` などやると、

[code]

    -f4795c1
    -e83d77e
    -bb3071c
    +6abda0a
    +4abf1f2
    +f63f014
    
[/code]

と表示されるようなイメージです。 (- は A のみに存在するコミット, + は B のみに存在するコミット)

このようなことは実現できますか？


CC BY-SA 3.0
2017-02-13T02:12:47.270
32613
2017-03-11T16:20:59.257
754
question
git
git で refs のコミットとしての差分を計算したい


ここの一番下のやつ

Commit Ranges - tripple dot

が参考になるかもしれません。

<https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection>


CC BY-SA 3.0
2017-02-13T07:37:38.927
32625
2017-02-13T07:37:38.927
8601
32613
answer


[`git rev-list --left-right A...B`](https://git-scm.com/docs/git-rev-list#git-
rev-list---left-right) とすることで、Aからしか辿れないコミットは `<` を、Bからしかたどれないコミットは `>`
を行頭につけて表示します。

[code]

    $ git log --graph --format="%h %s %d" --all
    * edf1e4a D'  (HEAD -> sub)
    | * 596d9dc D  (master)
    | *   97383f4 Merge branch 'sub'
    | |\
    | |/
    |/|
    * | c0beb50 C'
    * | 15ca411 B'
    | * 8089f66 C
    | * b863214 B
    |/
    * 26a4b95 A
    
    $ git rev-list --left-right --pretty=oneline --abbrev-commit master...sub
    >edf1e4a D'
    <596d9dc D
    <97383f4 Merge branch 'sub'
    <8089f66 C
    <b863214 B
    
[/code]

ちなみに `--boundary`
オプションを付けると共通するコミットも表示されますが、指定したコミットからさかのぼっていく形で探索するので、次の例で言うと `B'` は見えてないですね。

[code]

    $ git rev-list --left-right --boundary --pretty=oneline --abbrev-commit master...sub
    >edf1e4a D'
    <596d9dc D
    <97383f4 Merge branch 'sub'
    <8089f66 C
    <b863214 B
    -26a4b95 A
    -c0beb50 C'
    
[/code]


CC BY-SA 3.0
2017-03-11T16:20:59.257
33266
2017-03-11T16:20:59.257
8000
32613
answer