web-dev-qa-db-ja.com

現在のブランチからgit親ブランチ名を取得するにはどうすればよいですか?

現在私は機能ブランチにいますが、それが開発ブランチから作成されたのかリリースブランチから作成されたのかはわかりません。

現在のgitブランチから親ブランチ名を取得する方法を誰かに教えてもらえますか?.

7

Gitが有向非循環グラフを使用し、通常、リポジトリにはルートが1つしかない場合、すべてのブランチは1つの初期コミットをポイントします。したがって、実際に必要なのは、ブランチの履歴の最大部分を共有するブランチです。

HEADが現在のブランチの履歴に含まれているブランチを探すことはできません。このブランチHEADはそれ以降に移動した可能性が高いためです。

そのため、2つのブランチまたはコミットの最新の共通の祖先(別名フォークポイント)を検出するgit merge-baseを使用することをお勧めします。

$ git merge-base feature develop
12345abc
$ git merge-base feature release
98765fed

これにより、両方のブランチの履歴にそれぞれ表示される2つのコミットが出力されます。 2つのうちの1つはbothブランチに含まれるので、それらを再度merge-baseにフィードして、必要なコミット(またはむしろ、必要なコミット)を取得できますしないでください欲しい):

git merge-base 12345abc 98765fed
98765fed

したがって、この例では、featuredevelopから派生したものです。2つは、releaseにはないコミットを共有するためです。

これが機能するのは、機能と開発の間でクロスマージを行わない場合のみです。

5
Andreas Wolf

これは https://hankchizljaw.com/notes/24/ から)私にとってはうまくいきます:

git show-branch -a | grep '\*' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//'
0
TornadoAli

これまでのところ、これでうまくいきました。これは、Macではターミナルエイリアスとして、Windowsでは任意のタイプのショートカットとして使用できます。

git log --pretty=format:'%D' HEAD^ | grep 'Origin/' | head -n1 | sed 's@Origin/@@' | sed 's@,.*@@'

多くの場所で説明されているように、これは直接の親ではなく、現在のブランチから作成された最も近いブランチを作成するか、同じHEADを共有します^

0
Narasimha