可能性の重複:
Find the parent branch of a branchこのブランチはどのgitブランチからチェックアウトされましたか?
どのように私は、問題の分岐が(もしあれば)から分離Gitのブランチの名前を見つけるのですか?
可能性の重複:
Find the parent branch of a branchこのブランチはどのgitブランチからチェックアウトされましたか?
どのように私は、問題の分岐が(もしあれば)から分離Gitのブランチの名前を見つけるのですか?
master
は常にmaster
で、my_branch
は常にmy_branch
と考えるのは簡単ですが、そうではありません。 Github、あなたのウィンドウ、あなたのLinux、あなたのオフィスにあなたのリポジトリがあるとします。
そのため、8つの異なる支店があります。
github/master
github/my_branch
windows/master
windows/my_branch
linux/master
linux/my_branch
office/master
office/my_branch
を人間としてあなたはmaster
とmy_branch
としてそれらを参照してくださいが、Gitは8つの異なるブランチとして、それらを見ています。あなたはこのようなネットワーク持っているのであれば:
------------------------------------------------ linux/master
\--/ \-------/ / \-------- office/my_branch
| \---|--\--------/-------------------\------- my_branch
| |
| office/master
|
windows/master
をそれがmy_branch
はどこから来るのか尋ねるために何を意味するのでしょうか?それは多くの枝の合併の結果です!
私はあなたの質問に哲学的な問題があることを伝えたいと思います。しかし、完璧ではないが、それに答える方法がある。まずはgit log
を見てみましょう:
git log my_branch --pretty=oneline --graph
はあなたにマージとスタッフの素敵なプレゼンテーションを提供します。 git-logのマニュアルページから:
--first-parent
Follow only the first parent commit upon seeing a merge commit. This option can give a better overview when viewing the evolution of a particular topic branch,
because merges into a topic branch tend to be only about adjusting to updated upstream from time to time, and this option allows you to ignore the individual
commits brought in to your history by such a merge.
これを使用すると、ブランチの線形履歴が得られます。グラフを削除するだけSHA1sを出力し、あなたが得る:
git log my_branch --pretty=format:"%H" --first-parent
を、次のコマンドを使用して、SHA1が含まれている支店伝えることができます:
git branch --contains <commit>
は、これらのコマンドを使用して一緒にスクリプトを置く、あなたができます関心のある別のブランチ以外の別のブランチに含まれている最新のSHA1を基本的に検索する次のスクリプトを使用します。 (注:私はまだbashのスクリプトではよくないよ、これはそれほど効率的ではないかもしれない):
#! /bin/bash
if [ $# -lt 1 ]; then
branch=master
else
branch=$1
fi
sha1s=$(git log $1 --pretty=format:"%H")
res="Doesn't branch from anything"
for i in $sha1s; do
b=$(git branch --contains $i | awk '{ if (NF > 1) print $2; else print $1 }') # use awk to remove * from current branch
other_branch="";
for j in $b; do
if [ $branch != $j ]; then
other_branch=$j
break;
fi
done
if [ -n "$other_branch" ]; then
res=$other_branch
break
fi
done
printf -- '%s\n' "$res"
を私はそれがために、以下のような状況で、完璧ではないと述べました。 my_branch
がmaster
から分岐しているとします。最初のコミットは両方のブランチの履歴に含まれている
/------------ master
------(master)-----
\------------ my_branch
:実際には、あなたは、このようなグラフを参照してください。彼らがもともと主人から来たのは不明です。したがって、このスクリプトはmy_branch
がmaster
から分岐していると伝え、同時にmaster
がmy_branch
から分岐していることを伝えます。どちらが元のものかを知る方法はありません。
リモートブランチがトラッキングされていること、またはブランチが分割されているブランチ(存在する場合)を意味しますか?私はあなたがいつも後者を見つけることができるとは思わない。 –
このブランチが(もしあれば)そこから分割されたローカルブランチ。あなたがしたよりもこれを述べることはできませんでした。 – Dziamid
私は誤解を招くかもしれないが、私はGitがその情報を記録するとは思わない。 –