git checkout リモート参照 質問する

git checkout リモート参照 質問する

github にプルリクエストのリストがあります。次のようにプルリクエストを取得できます。

git fetch origin +refs/pull/*:refs/remotes/origin/pr/*

次のような出力が得られます:

* [new ref]         refs/pull/1/head -> origin/pr/1/head
* [new ref]         refs/pull/1/merge -> origin/pr/1/merge
* [new ref]         refs/pull/10/head -> origin/pr/10/head
* [new ref]         refs/pull/10/merge -> origin/pr/10/merge
* [new ref]         refs/pull/11/head -> origin/pr/11/head
* [new ref]         refs/pull/11/merge -> origin/pr/11/merge

今、私はそれらの参照の 1 つをチェックアウトしたいと思います。私が試した何も機能していないようです:

$ git checkout refs/pull/1/head
error: pathspec 'refs/pull/1/head' did not match any file(s) known to git.

または:

git checkout origin/pr/1/head
error: pathspec 'origin/pr/1/head' did not match any file(s) known to git.

この参考資料をチェックアウトするにはどうすればいいですか?

ベストアンサー1

最初のコマンド ( )は、 がリモート リポジトリ内の参照の名前であるgit checkout refs/pull/1/headため機能しませんでした。refspecによって に変換されたため、ローカル リポジトリにその名前の参照はありません。refs/pull/1/headfetchrefs/remotes/origin/pr/1/head

2 番目のコマンド ( git checkout origin/pr/1/head) は機能するはずですが、「デタッチされた HEAD」警告が表示されるはずです。Stack Overflow に質問を投稿するときに、タイプミスを修正しましたか?

refspecは、fetchgit にリモート参照をrefs/remotesディレクトリ内のローカル参照に変換するように指示しました。そのディレクトリ内の参照は特別に扱われます。これらは「リモート参照」であり、最後に を実行したときのリモート リポジトリの状態を示しますfetch。通常、これらの参照を直接チェックアウトすることは望ましくありません。リモート参照を「フォロー」または「追跡」するように構成されたローカル ブランチを作成する必要があります (これにより、リビジョン パラメータなどの特別な便利なショートカットが有効になり、 / の使用が@{u}容易になります)。pushpull

試す:

git fetch origin +refs/pull/*:refs/remotes/origin/pr/*
git checkout -b whatever-branch-name-you-want origin/pr/1/head

上記は、と同じコミットを指す という新しいローカル ブランチwhatever-branch-name-you-want( と呼ぶことをお勧めします) を作成し、を追跡するように構成してから、新しいブランチに切り替えます。pr/1/headorigin/pr/1/headwhatever-branch-name-you-wantorigin/pr/1/head

おすすめ記事