"Impossibile aggiornare i percorsi e passare contemporaneamente alla diramazione"


186

A volte utilizzo l' checkout -bopzione per creare un nuovo ramo, controllarlo allo stesso tempo e impostare il monitoraggio in un solo comando.

In un nuovo ambiente, ottengo questo errore:

$ 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?

Perché a Git non piace? In passato funzionava con lo stesso repository.


6
Il messaggio di errore indica che origin/masternon è un ID commit, ovvero non un ramo remoto valido. Si presenta in git branch -routput?
Torek,

No Si scopre che non ho controllato tutti i rami remoti durante il clone.
marekful

Risposte:


199

' origin/master' che non può essere risolto come commit

Strano: è necessario controllare i telecomandi:

git remote -v

E assicurati che originsia recuperato:

git fetch origin

Poi:

git branch -avv

(per vedere se hai recuperato un origin/masterramo)

Infine, usa al git switchposto del confusogit checkout , con Git 2.23+ (agosto 2019).

git switch -c test --track origin/master

11
Ho avuto un refuso nel mio comando che ha innescato questo errore; Non stavo scrivendo correttamente il mio telecomando!
qix,

2
Era una nuova filiale e il mio repository locale non lo sapeva. Ho dovuto fare un pulle poi questo comando ha funzionato.
coding_idiot,

2
Questa risposta è stata utile perché mi ha mostrato che c'è davvero qualcosa di strano: i telecomandi sono impostati correttamente, ma il nuovo ramo remoto non è semplicemente recuperato. Quando clonare il telecomando in una directory pulita, funziona. La mia .gitdirectory potrebbe essere in qualche modo corrotta?
Konrad Rudolph,

git remote -v ha restituito questo errore irreversibile: non è un nome oggetto valido: 'remote'.
Karim Samir,

@KarimSamir potresti fare una domanda separata (con il tuo sistema operativo e la versione git), poiché git remote -veseguito in un repository git funziona.
VonC,

79

FWIW: Se hai un refuso nel tuo nome di ramo otterrai questo stesso errore.


4
In realtà sarebbe bello se qualcuno potesse prendere il tempo di parlarne agli sviluppatori Git, il messaggio di errore non è molto informativo;)
Scorchio,

8
sì, questo era il mio problema, avevo uno spazio nel mio nome di filiale
Karim Samir,

Lo stesso qui, stavo provando git checkout -b origin mybranchinvece git checkout -b mybranch(extra origin)
Guillaume Renoult l'

Ho copiato e incollato il nome del mio ramo e ho lasciato spazio vuoto dopo il nome del ramo che ha causato questo errore.
learningKnight

Stavo cercando di fare il checkout orgin/my-branchinvece di origin/my-branch. iNe ho perso uno e ho continuato a grattarmi la testa per un po 'per capire perché un vecchio alleato si rifiuta di andare d'accordo. L'errore era davvero il problema.
DDM,

55

È possibile ottenere questo errore nel contesto, ad esempio, di una build Travis che, per impostazione predefinita, controlla il codice con git clone --depth=50 --branch=master. Per quanto ne so, puoi controllare --depthtramite .travis.ymlma non tramite --branch. Dal momento che ciò determina il monitoraggio di un solo ramo da parte del telecomando, è necessario aggiornare in modo indipendente il telecomando per tenere traccia dei riferimenti del telecomando desiderato.

Prima:

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

La correzione:

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

Dopo:

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

5
Risolto per me. Ho usato un clone --depth = 1 superficiale e questo è ciò di cui avevo bisogno per cambiare ramo.
Sawtaytoes,

1
Gah sì, la cosa della profondità porta sicuramente a questo errore! Se possibile, suggerirei di modificare le prime frasi per enfatizzare la profondità.
Dubslow,

19

Questa semplice cosa ha funzionato per me!

Se dice che non può fare 2 cose contemporaneamente, separale.

git branch branch_name origin/branch_name 

git checkout branch_name

Rende facile scoprire qual è il vero problema
Z. Khullah,

9

Puoi seguire questi passaggi quando ti imbatti in questo problema:

  1. Eseguire il comando seguente per elencare i rami noti per il proprio repository locale.

git mostra origine remota

che produce questo:

 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. Dopo aver verificato i dettagli come (recupera URL, ecc.), Esegui questo comando per recuperare qualsiasi nuovo ramo (vale a dire che potresti voler controllare nel repository locale) che esiste nel telecomando ma non nel tuo locale.
» git remote update

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

Come puoi vedere, il nuovo ramo è stato recuperato da remoto.
3. Infine, controlla il ramo con questo comando

» git checkout -b Feature3 origin/Feature3

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

Non è necessario dire esplicitamente a Git di tracciare (usando --track ) il ramo con il telecomando.

Il comando sopra imposterà il ramo locale per tenere traccia del ramo remoto dall'origine.


4

Se hai uno spazio bianco nel tuo ramo, otterrai questo errore.


1

Per me avevo bisogno di aggiungere il telecomando:

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

allora potrei recuperare

git fetch myRemoteName

1

Ciò causa che il tuo ramo locale non tiene traccia del ramo remoto. Come ha detto ssasi, è necessario utilizzare questi comandi:

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

Ho risolto il mio problema proprio ora ....


0

Per prima cosa è necessario Fetchil telecomando (il ramo specifico), quindi è possibile creare un br locale e rintracciarlo con quel ramo remoto usando il comando (cioè checkoutcon -b e --track).


0

Dovresti andare alla directory del sottomodulo ed eseguire git status.

Potresti vedere molti file cancellati. Puoi correre

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles è il tuo nome

  5. git submoudle add ....


0

Puoi usare questi comandi: git remote update, git fetch, git checkout -b branch_nameA origine: branch_nameB

Penso che forse è a causa del tuo ramo locale non è possibile monitorare il ramo remoto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.