「パスを更新すると同時にブランチに切り替えることはできません」


186

私は時々使用しcheckout -b、新しいブランチを作成すると同時に、それをチェックアウトし、1つのコマンドでトラッキングを設定するオプションを選択します。

新しい環境では、次のエラーが発生します。

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

なぜGitは気に入らないのですか?これは、以前は同じリポジトリで機能していました。


6
エラーメッセージは、それorigin/masterがコミットIDではない、つまり有効なリモートブランチではないことを示しています。git branch -r出力に表示されますか?
トレック2014

そうではなかった。クローン中にすべてのリモートブランチをチェックアウトしなかったことがわかりました。
素晴らしい14

回答:


199

origin/masterコミットとして解決できない「」

奇妙な:あなたはあなたのリモコンをチェックする必要があります:

git remote -v

そして、originフェッチされていることを確認してください:

git fetch origin

次に:

git branch -avv

origin/masterブランチをフェッチしたかどうかを確認するため)

最後git switchに、紛らわしいのgit checkout代わりに、Git 2.23以降(2019年8月)を使用します。

git switch -c test --track origin/master

11
このエラーの原因となったコマンドにタイプミスがありました。リモコンのスペルが正しくありませんでした!
qix

2
それは新しいブランチであり、私のローカルリポジトリはそれを知りませんでした。私はしなければならなかったpull、そしてこのコマンドはうまくいった。
coding_idiot

2
この回答は参考になりました。何か変なことが起こっていることがわかりました。リモートは正しく設定されていますが、新しいリモートブランチは単にフェッチされていません。クリーンなディレクトリにリモートを複製すると、機能します。私の.gitディレクトリはどういうわけか壊れていますか?
Konrad Rudolph、

git remote -vが致命的なエラーを返しました:有効なオブジェクト名ではありません: 'remote'。
Karim Samir、

@KarimSamir git remote -vは、git repoで実行すると機能するので、(OSとgitバージョンを使用して)別の質問をすることができます。
VonC、2015年

79

FWIW:ブランチ名にタイプミスがあると、同じエラーが発生します。


4
実際に誰かが時間をかけてGit開発者にこのことを伝えることができればいいのですが、エラーメッセージはあまり有益ではありません;)
Scorchio

8
はい、これが私の問題でした。ブランチ名にスペースがありました
Karim Samir

ここでも同じで、(追加)のgit checkout -b origin mybranch代わりに試していましたgit checkout -b mybranchorigin
Guillaume Renoult

私はブランチ名をコピーアンドペーストし、ブランチ名の後に末尾の空白があったため、このエラーが発生しました。
learningKnight

orgin/my-branch代わりにチェックアウトしようとしていましたorigin/my-branch。1つを逃したi&私は、古い味方がうまくいかない理由を理解するためにしばらく頭を掻き続けました。実際にタイプミスが問題でした。
DDM

55

このエラーは、たとえば、デフォルトででコードをチェックするTravisビルドのコンテキストで発生する可能性がありますgit clone --depth=50 --branch=master。私の知る限りでは、を--depth介して制御できますが、は制御でき.travis.ymlません--branch。その結果、リモートによって追跡されるブランチは1つだけになるため、目的のリモートの参照を追跡するには、リモートを個別に更新する必要があります。

前:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

修正:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

後:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master

5
私のためにそれを解決しました。私は浅い--depth = 1クローンを使用しましたが、これはブランチを切り替えるために必要なものです。
Sawtaytoes 2015

1
ええ、そうですね、間違いなくこのエラーが発生します。できれば、最初の数文を編集して、奥行きを強調することをお勧めします。
Dubslow 2017年

19

この単純なことでうまくいきました!

2つのことを同時に実行できないと表示されている場合は、それらを分離します。

git branch branch_name origin/branch_name 

git checkout branch_name

本当の問題が何であるかを簡単に見つけることができます
Z. Khullah

9

この問題に遭遇したときは、次の手順を実行できます。

  1. 次のコマンドを実行して、ローカルリポジトリで既知のブランチを一覧表示します。

git remote show origin

これはこれを出力します:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. (フェッチURLなど)のような詳細を確認した後、このコマンドを実行して、リモートには存在するがローカルには存在しない新しいブランチ(つまり、ローカルリポジトリでチェックアウトしたいブランチ)をフェッチします。
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

ご覧のとおり、新しいブランチがリモートからフェッチされています。
3.最後に、このコマンドでブランチをチェックアウトします

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

リモートでブランチを追跡する(--trackを使用)ようにGitに明示的に指示する必要はありません。

上記のコマンドは、ローカルブランチを設定して、リモートブランチを起点から追跡します。


4

ブランチに空白がある場合、このエラーが発生します。


1

私にとっては、リモートを追加する必要がありました:

git remote -add myRemoteName('origin' in your case) remoteGitURL

その後、私はフェッチできました

git fetch myRemoteName

1

ローカルブランチがリモートブランチを追跡しないことが原因です。ssasiが言ったように、これらのコマンドを使用する必要があります:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

私は今問題を解決しました...


0

最初にFetchリモート(特定のブランチ)が必要です。次にローカルbrを作成し、コマンドを使用して(つまりcheckout-bと--track を使用して)そのリモートブランチで追跡できます。


0

サブモジュールdirに移動して実行する必要がありますgit status

多くのファイルが削除されたことがわかります。あなたは走ることができます

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudlesはあなたの名前です

  5. git submoudle add ....


0

次のコマンドを使用できます:git remote update、git fetch、git checkout -b branch_nameA origin:branch_nameB

あなたのローカルブランチがリモートブランチを追跡できないことが原因かもしれません

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