Gitチェックアウト:パスの更新はブランチの切り替えと互換性がありません


467

私の問題は、ブランチを切り替えるときのFatal Gitエラーに関連しています

コマンドでリモートブランチをフェッチしようとしています

git checkout -b local-name origin/remote-name

しかし、私はこのエラーメッセージを受け取ります:

fatal:git checkout:パスの更新はブランチの切り替えと互換性がありません。
コミットとして解決できない 'origin / remote-name'をチェックアウトするつもりでしたか?

手動でブランチを作成してからリモートブランチをプルすると、新しいクローンを作成してブランチをチェックアウトするのと同じように機能します。

使用しているリポジトリで動作しないのはなぜですか?


1
そのコマンドの最初のインスタンスから何が変更されたか(エラーメッセージのトリガー)?
VonC、2009年

git init git fetch git fetch git://blabla.com/dir1/Project.git

回答:


739

これは、ローカルgitリポジトリがまだ認識していないリモートブランチをチェックアウトしようとしたときに発生すると思います。試してください:

git remote show origin

チェックアウトするリモートブランチが「追跡されるリモートブランチ」ではなく「新しいリモートブランチ」の下にある場合は、最初にそれらをフェッチする必要があります。

git remote update
git fetch

今それはうまくいくはずです:

git checkout -b local-name origin/remote-name

7
これで問題が解決しました。上記の恣意的な答えではありません。
Jessedc 2010年

21
そのリポジトリのすべてのブランチを取得するには、「git fetch REPOSITORY_NAME」にする必要があります。
Mike Thomsen

1
必ずしも。git fetchすべてのリモートリポジトリからすべてのブランチを取得します。
マイケル・グリニッチ

4
他の誰かがこのすべての完全な狂気に苦しんでいる場合:git fetch origin / branchnameはgit fetchと同じではありません。前者は単にgit remote show originを介して表示される列に「new(次のフェッチはremotes / originに保存されます)」を表示するだけです。
Alexander Kellett、2011

7
明示的に追加した(つまりorigin以外の)リモートに対してこれを実行しようとしている場合はgit remote update、フェッチがそのリモートをフェッチする前に行う必要があります。それ以外の場合は、次のようなメッセージが表示されます。Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?これを回答に追加して、送信元でのみ機能する同じ回答を読む時間を節約してください。
ブルーノブロノスキー2013

150

代替構文、

git fetch origin remote_branch_name:local_branch_name

12
これでうまくいきました。私のリモートブランチ名は起源ではありません。私がウォッカを飲んでいたので、それが違いをもたらすかどうかはわかりません。
リミアン

13
これは単なる代替構文ではありませんが、git checkout -b branch_name origin / branch_nameが機能しないときに機能します
codercake

1
これにより、「git checkout --track origin / remote-branch」を実行したときの問題も修正されました。これは、修正前のOPと同じエラーを最初に提供していました。ありがとう!
kakyo

1
検証済みの回答も実行した後、私のために働きました。
AsTeR 2013年

2
はい、--depth元のクローンの修飾子がここで間違っているのではないかと思います。私は成功しましたgit fetch remote_branch_name:local_branch_nameが、他のすべてのアドバイスは失敗しました。
John Kelleher、2015

46

このスレッドで読み取ることができたもののほとんどを成功せずに試した後、私はこのスレッドに出くわし ました。「git branch -r」にリモートブランチが表示されない

.git / configファイルが正しくないことがわかりました。簡単な修正を行った後、すべてのブランチが表示されました。

から行く

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

トリックをしました


4
それは確かに奇妙な設定です。リモートからマスターブランチのみをフェッチするようにgitに指示します。
Ikke 2013

3
できれば10回投票します!-これは複製時に新しいgitが行うことのようです
mpapis

2
私は同じ問題を抱えていました、それは私を狂わせました。遠方のブランチが見当たらない方はこちらをチェックしてください!!
カルロスグラナドス2014年

あなたの答えを神に感謝してください:)
Sacha

心=吹き飛ばされた!ありがとうございました!
チランジブ

12

これが役立つか、質問に正確に関連しているかはわかりませんが、リモートリポジトリから単一のブランチのみをフェッチしてチェックアウトしようとしている場合は、次のgitコマンドでうまくいきます。

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch

11

上記のどれも私のために働いていません。私の状況は少し異なります。リモートブランチは起点にありません。しかし、別のリポジトリにあります。

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

ヒント:次の出力git branch -v -aにリモートブランチが表示されない場合、それをチェックアウトする方法はありません。

1.7.5.4での作業を確認


arf、VirtualStaticVoidが同じソリューションを持っていることを理解してください!
Olivier Refalo 2011

+1 for git branch -v -afetch = +refs/heads/*:refs/remotes/master/*リモートが呼び出されたにもかかわらず、誤って構成されたリモートがありましたupstream
keflavich 2013

7

私にとってうまくいったのは:

git fetch

これにより、リモートのすべてのブランチのすべての参照がマシンに引き下げられます。それから私はできる

git checkout <branchname>

そしてそれは完璧に機能しました。上位投票の回答に似ていますが、もう少し簡単です。


4

remote-nameという名前のリモートブランチはないようですが、origin / remote-nameという名前のローカルブランチを誤って作成した可能性があります。

ある時点であなたがタイプすることは可能ですか?

gitブランチorigin / remote-name

したがって、origin / remote-nameという名前のローカルブランチを作成しますか?次のコマンドを入力します。

git checkout origin / remote-name

次のいずれかが表示されます。

ブランチ「origin / remote-name」に切り替えました

これは、実際には誤った名前のローカルブランチであること、または

注:ローカルのブランチではない「origin / rework-isscoring」に移動しています
このチェックアウトから新しいブランチを作成する場合は、それを行うことができます
(現在またはそれ以降)-bをcheckoutコマンドで再度使用する。例:
  git checkout -b 

これは、実際にはリモートブランチであることを意味します。


3

あまり直感的ではありませんが、これは私にとってはうまくいきます...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

次にgit branch --trackコマンドを実行します...

  git branch --track $BRANCH origin/$BRANCH

2

私にはタイプミスがあり、リモートブランチは存在しませんでした

git branch -aリモートブランチを一覧表示するために使用します


1

あなたの問題は、この他のSOの質問「チェックアウトの問題」にリンクできますか?

すなわち:に関連する問題:

  • 古いバージョンのGit
  • 新しいブランチを開始するコミットの名前git checkout -b [<new_branch>] [<start_point>][<start_point>]参照する、奇妙なチェックアウト構文'origin/remote-name'
    (一方git branch、start_pointはリモートブランチの名前です)

注:checkout.shスクリプトの内容は次のとおりです。

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

これは、構文git checkout -b [] [remote_branch_name]がブランチの名前を変更することと、互換性がないと見なされる新しいブランチの新しい開始点をリセットすることの両方に似ています。


問題は解決された。git checkout -b local-name remote / remote-branchは実際に機能します
Ikke

1
興味深いのは、そのコマンドの最初のインスタンスから何が変わったのか(エラーメッセージが表示される)ですか。
VonC、2009年

1

何十億回ものフェッチの後、まだ追加されたリモートは表示されませんでしたが、ブロブはプール内にありました。結局のところ--tagsオプションに与えられるべきではないgit remote add何らかの理由で。.git / configから手動で削除して、git fetchに参照を作成させることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.