11

リモートからブランチをフェッチしたいのですが、ブランチ名がリモート名で始まっていません。たとえば、次のようになります。

git checkout -b BRANCH origin/BRANCH

場合によっては機能しますが、場合によっては次のエラーが発生します。

fatal: git checkout: updating paths is incompatible with switching branches.

リモートにこのブランチがあると確信していますが、これは機能します:

git checkout -b origin/BRANCH

その後、別のブランチに切り替えて、ブランチ origin/BRANCH の名前を BRANCH に変更し、再度 BRANCH に切り替える必要があります... エラーの意味を知りたいです。

4

2 に答える 2

15

これが、エラーメッセージが表示される理由です。

git checkout2つのうちの1つを行うことができます。ブランチを指定するだけでパスを指定しない場合、現在のブランチが指定したブランチに切り替わります。

git checkout mybranch   # switch to branch 'my branch'

いくつかのパスを指定すると、git はそれらのパスをインデックスからチェックアウトするか、ブランチを指定した場合は特定のブランチからチェックアウトします。

git checkout myfile   # checkout 'myfile' from index

ご覧のとおり、潜在的なあいまいさがあります。myfileという名前のブランチまたはという名前のファイルがあった場合はどうなるmybranchでしょうか?

git がこのあいまいさを解決する方法は、最初にパラメーターをテストしてブランチに一致するかどうかを確認し、そうでない場合はパラメーターがファイルを参照していると見なすことです。同じ名前のブランチとファイルがある場合は、この構文を使用して git にパラメーターをファイルとして強制的に処理させることができます。

git checkout -- myfile  # treat 'myfile' as a file

新しいブランチを作成するオプションは、の-bブランチ切り替え形式を使用している場合にのみ有効でcheckoutあり、インデックスから指定されたファイルをチェックアウトしている場合には有効ではありません。

git checkout -b newbranch myfile  # Illegal. I can't use `-b` when
                                  # I'm checking out files.

試しgit checkout -b newbranch origin/BRANCHてみてこのエラーが発生した場合はorigin/BRANCH、ブランチの名前と一致しなかったため、git はファイルを参照している必要があると想定しました。

あなたができるリモートブランチ参照を表示するにはgit branch -r. 存在するはずのブランチへの参照がない場合はgit fetch、リモートから取得するために a を実行する必要がある場合があります。

-b新しいブランチのベースとなるブランチ名を指定しない場合、git はデフォルトで using HEAD、つまり現在チェックアウトされているブランチがオンになっているコミットを使用します。

git checkout -b origin/BRANCH

これにより、現在のコミットに基づいて呼び出される新しいローカルブランチが作成されます。origin/BRANCHこれはせいぜい、混乱を招く可能性が高く、まったく望んでいるようには聞こえません。

于 2011-06-11T12:39:34.920 に答える
3

git checkoutいくつかのブランチに切り替えますが、リモートリポジトリからはフェッチしません。git checkout -bまた、ブランチを作成します。リモートリポジトリからブランチを取得するには、を使用しますgit fetch

于 2011-06-11T11:51:02.153 に答える