17

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.

このリファレンスをチェックアウトするにはどうすればよいですか?

4

2 に答える 2

22

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

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

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

試す:

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

于 2012-11-30T03:37:03.163 に答える
0

チェックアウトできるものをチェックしてください

git branch -a
于 2012-11-30T02:43:33.183 に答える