10
           :
           A
T         / \
i        B   C
m        :   :
e        D   E
          \ /
|          F
V          :

git merge-base B E2つの共通の祖先Aがコミットする場所を見つけることができます。F2つのブランチが再びマージされるコミットを見つける方法はありますか?

4

3 に答える 3

1

おっとっと。それを十分に注意深く読んでいませんでした。

コミット内の唯一の情報は、その親 (または親) の ID です。親コミットから子に到達することはできません (これは、DAG であるリポジトリの指示された部分です)。

これをもっと見ると、--ancestry-pathgit log のオプションでこれができるようです。たとえば、次のようになります。

* 85d26ab When compiling vim, also compile & install gvim
*   3146e5d Merge remote-tracking branch 'origin/devel' into deve
|\
| * 28d08e5 rebasing-merge: specify all commits explicitly
* | 006d11d Help 'file' find its magic file
|/
* e68531d (tag: Git-1.7.6-preview20110720) Update submodules

を使用して、これら 2 つのコミットのすべての子を取得できます。

git log --oneline --ancestry-path B..E

これを逆にして最初のものを選ぶと、それが F です。

git rev-list --reverse --ancestry-path 28d08e5..006d11d | head -1

私の場合は 3146e5d を返します。

于 2012-06-06T22:14:35.793 に答える