7

リモート Git リポジトリのブランチに、特定の名前のマージされたブランチが含まれているかどうかを確認したいと考えています。例えば:

  • にリモート リポジトリがありますwww.example.com:/repo.git
  • そのリポジトリには、という名前のブランチがありますmyBranch
  • myFeatureBranchのような特定の機能ブランチが にマージされているかどうかを確認したいmyBranch

リポジトリと checkout を複製した場合はmyBranch、 を実行できますがgit show-ref --verify refs/heads/myFeatureBranch、それは私がやりたいことではありません。クローンを作成せずにリモートブランチで行う必要があります。

すでに をいじってみましgit ls-remote --heads www.example.com:/repo.gitたが、得られるのはリモート ヘッドのリストだけです。誰もそれをやったことがありますか?

4

2 に答える 2

1

Git は設計によりローカルで動作します

Git の分散型の性質は、基本的にいくつかの基本的な概念に基づいて設計されています。

  1. pushls-remoteなどのいくつかの小さな例外を除いて、ほとんどの操作はローカルです。
  2. 履歴はコミット オブジェクトから計算されます。

つまり、履歴の探索はローカル操作であり、リモート リポジトリでは実行できないということです。

リモート参照

git-ls-remoteコマンドは、アップストリームで参照を検索するのに役立ちますが、履歴は検索しません。例えば:

git ls-remote origin | egrep 'some_branch_name|merge'

探している名前付きブランチに一致するリモート上の参照、または (GitHub の場合) 次のようなマージされたプルリクエストから作成された参照を出力します。

381a77fd72ea594cfce5c82c845ad3d10bb87d71        refs/pull/99/merge

git-ls-remoteコマンドは、関連するコミット ID とともに、リモート リポジトリで利用可能な参照を表示します。ただし、特定のコミットが含まれているブランチを見つけたい場合は、完全な履歴にアクセスする必要があります。そのためには、ローカル コピーが必要です。

マージ コミットを含むブランチの検索

この問題に対処するために私が知っている最善の方法は次のとおりです。

  1. ですべてのブランチをフェッチしgit fetch --all originます。
  2. で必要なマージ コミットを見つけますgit log --merges
  3. を含むブランチを見つけますgit branch --all --contains <commit>

これにより、指定されたコミットを含むブランチのリストが表示されます。

于 2013-01-16T19:29:51.743 に答える
1

リモートでコマンドを実行することはできません。これは単なる同期メカニズムです。通常のコマンドを実行するには、クローンを作成する必要があります。

あなたは見上げたいかもしれませんgit branch -a --contains

于 2013-01-16T18:45:00.853 に答える