web-dev-qa-db-ja.com

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

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

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

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

しかし、私はこのエラーメッセージが出ます:

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

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

一緒に作業しているリポジトリで動作しないのはなぜですか?

460
Ikke

あなたのローカルgitリポジトリがまだ認識していないリモートブランチをチェックアウトしようとしている時にこれが起こると私は信じています。試してください:

git remote show Origin

チェックアウトしたいリモートブランチが "Tracked remote branches"ではなく "New remote branches"の下にある場合は、まずそれらを取得する必要があります。

git remote update
git fetch

これでうまくいくはずです。

git checkout -b local-name Origin/remote-name
735
user167628

代替構文

git fetch Origin remote_branch_name:local_branch_name
148
Rare Pleasures

このスレッドでうまく読めなかったことのほとんどを試した後、私はこれに出会いました: "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/*

トリックをしました

44
PålOliver

これが役に立つのか、それともあなたの質問に正確に関連するのかはわかりませんが、リモートリポジトリから単一のブランチだけを取り出してチェックアウトしようとしているなら、次の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
12

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

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

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

1.7.5.4で作業を確認した

11
Olivier Refalo

私にとってうまくいったのは次のとおりです。

git fetch

これは、リモートのすべてのブランチについて、すべての参照をあなたのマシンに引き下げます。それから私はできる

git checkout <branchname>

そしてそれは完璧に働いた。トップ投票の回答と似ていますが、もう少し簡単です。

7
Matt

Remote-nameという名前のリモートブランチはありませんが、誤ってOrigin/remote-nameという名前のローカルブランチを作成したのでしょう。

ある時点で次のように入力することは可能ですか?

 git branchオリジン/リモートネーム

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

 git checkout発行元/リモート名

あなたはどちらを見るでしょう:

ブランチ "Origin/remote-name"に切り替えました

これは本当に間違った名前のローカルブランチであることを意味します。

注:ローカルのブランチではない "Origin/rework-isscoring"への移動
このチェックアウトから新しいブランチを作りたい場合は、
(今すぐ、または後で)-bをcheckoutコマンドと一緒に使用します。例:
 git checkout -b 

つまり、それは本当にリモートブランチです。

4
Don Branson

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

  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
3
Eddie B

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

リモートブランチを一覧表示するにはgit branch -aを使用してください

2
Thomas

ブロブがプール内にあったとしても、何十万回もフェッチした後でも、まだ追加されたリモートは表示されませんでした。何らかの理由で - tagsオプションをgit remote addに指定してはいけません。 git fetchにrefを作成させるために、手動で.git/configからそれを削除することができます。

1
eMPee584

問題は、この他のSO質問にリンクできますか "checkout problem"

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

  • 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]がブランチの名前を変更し、新しいブランチの新しい開始点をリセットし、互換性がないと見なされるようです。

1
VonC