3

After setup of an OpenEmbedded project, the sources are set to detached head state. How do you determine from which branch, either local or remote, the source code is checked out from?

Yes you can check out the branches and and compare the code. Is there a simpler approach?

I'm using Git version 1.7.1.

$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=git://arago-project.org/git/projects/meta-arago-amsdk.git
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.amsdk-06.00.00.00-integration.remote=origin
branch.amsdk-06.00.00.00-integration.merge=refs/heads/amsdk-06.00.00.00-integration

$ git branch -a
* (no branch)
  amsdk-06.00.00.00-integration
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/amsdk-05.06.00.00-integration
  remotes/origin/amsdk-05.07.00.00-integration
  remotes/origin/amsdk-05.08.00.00-integration
  remotes/origin/amsdk-06.00.00.00-integration
  remotes/origin/master
  remotes/origin/master-upstream
4

1 に答える 1

10

解決策 1: git reflog

HEAD作業コピーが切り離されたヘッド状態になってから参照を移動していない場合はgit reflog -1、ヘッドが切り離された場所を見つけるために使用できます。

git reflog -1
d761f4a HEAD@{0}: checkout: moving from feature to head~5

この情報が古いバージョンの Git で利用できるかどうかはわかりません。

参照を移動している場合でもHEAD、reflog のどこかでデタッチしたポイントを見つけることができる場合があります。

git reflog | grep checkout

にアクセスできないユーザーgrepの場合はfindstr、PowerShell で使用するか、Git に組み込まれている次のフラグを使用できます。

git log --walk-reflogs --grep-reflog "checkout" --oneline

解決策 2: 現在のコミットを含むすべてのブランチを見つける

現在チェックアウトしているコミットを含むすべてのブランチ (ローカル ブランチとリモート トラッキング ブランチの両方) を検索します。

git branch --all --contains HEAD

次に、各ブランチの最初のコミットをチェックして、指定されたコミットがそのブランチの先頭であるかどうかを確認します。

git log -1 <branch>

シンプルなソリューションを提供してくれた torek に感謝します。

于 2013-09-06T22:40:35.730 に答える