

Gitで二つのコミットが同じブランチに属するとして、そのブランチの中でどちらのコミットが先か(あるいは後か)を判別する方法を教えてください。


CC BY-SA 4.0
2020-09-25T19:19:54.017
70707
2020-10-03T05:01:56.537
42064
question
git
Gitで同じブランチに属する2つのコミットの順序を知る方法

[code]

    git log --pretty=format:"%h %ar %s" --graph
    
[/code]

として 表示されたログをみて ２つの コミットが表示される位置を見て判断してはいかがでしょう

[code]

    * 458d5cb 4 days ago Respect interactive repo name input on create
    *   e930122 6 days ago Merge pull request #1834 from nejat-njonjo/ubuntu-installation
    |\
    | * e2cca5d 7 days ago adding hkp:// and :80 does the trick
    |/
    * 921a299 7 days ago Update install_linux.md
    * d336fab 7 days ago Update install_linux.md
    *   3829888 7 days ago Merge pull request #1766 from mmontes11/view-specific-branch-of-repo
    |\
    | * 381d1a1 8 days ago Added option to specify branch in gh repo view
    * |   21c12ce 7 days ago Merge pull request #1757 from cli/ubuntus
    |\ \
    | * | 74665b2 8 days ago support more ubuntus
    | |/
    * | f6aa6b0 7 days ago chore: add make clean to remove bin and manpages (#1776)
    * |   49e9ede 7 days ago Merge pull request #1803 from timsueberkrueb/patch-1
    
[/code]

※ `https://github.com/cli/cli.git` の `trunk` ブランチの例

こんな感じで表示されるので この中の表示されるコミットの位置や日付を見て判断したらいかがでしょう。

ただ、上記の例で コミット `381d1a1` と `21c12ce` のように マージされた コミットは  
どちらが先なのか判断するのは 意見が分かれるところです。  
git の コミットのタイムスタンプは 端末の時計に依存するので端末の時計が違っている場合  
があるからです。  
また コミットを `cherry-pick` した時は コミットした時間と それを そのブランチに登録した  
時間の２つの時間があり、どちらの時間を基準とするか悩ましいところです。

また `git log --graph` の代わりに `gitk` を使うと 下記のようにグラフィカルに表示されるので便利です。

[![画像の説明をここに入力](https://i.stack.imgur.com/yBw5i.png)](https://i.stack.imgur.com/yBw5i.png)


CC BY-SA 4.0
2020-09-25T21:11:12.780
70708
2020-09-25T21:11:12.780
18851
70707
answer


[`git merge-base`](https://git-scm.com/docs/git-merge-base)が利用可能かと思います。

説明にある通り、引数に指定したコミットの共通の祖先を見つけるのが目的のコマンドです。  
そして、2つのコミットが同一ブランチに存在する場合、どちらかが必ず他方の祖先です。

[code]

    git merge-base <コミットA> <コミットB>
    
[/code]

を実行し、

  * `<コミットA>`あるいは`<コミットB>`が出力されればそれが他方の祖先
  * 別のコミットが出力された場合、どちらかが他方の祖先であるという関係にはない

ということになります。


CC BY-SA 4.0
2020-10-03T05:01:56.537
70891
2020-10-03T05:01:56.537
2808
70707
answer