web-dev-qa-db-fra.com

"origine de git rebase" vs. "origine / maître de git rebase"

Je ne comprends pas la différence entre git rebase Origin et git rebase Origin/master. Dans mon cas, j'ai cloné un référentiel git deux fois. Dans le premier clone je dois utiliser git rebase Origin et dans l'autre clone je dois utiliser git rebase Origin/master.

Un exemple: http://paste.dennis-boldt.de/2011/05/11/git-rebase

53
Dennis

git rebase Origin signifie "rebase de la branche de suivi de Origin", tandis que git rebase Origin/master signifie "rebase de la branche master de Origin"

Vous devez avoir une branche de suivi dans ~/Desktop/test, ce qui signifie que git rebase Origin sait quelle branche de Origin pour rebaser. Si aucune branche de suivi n'existe (dans le cas de ~/Desktop/fallstudie), git ne sait pas quelle branche de Origin il doit prendre et échoue.

Pour résoudre ce problème, vous pouvez rendre la piste de branche Origin/master avec:

git branch --set-upstream-to=Origin/master 

Ou, si master n'est pas la branche actuellement extraite:

git branch --set-upstream-to=Origin/master master
67
CharlesB

Voici une meilleure option:

git remote set-head -a Origin

De la documentation:

Avec -a, la télécommande est interrogée pour déterminer son HEAD, puis $ GIT_DIR/remotes // HEAD est défini sur la même branche. Par exemple, si la télécommande HEAD est pointée vers la suivante, "l'origine git de la tête de jeu distante git - a" définira $ GIT_DIR/refs/remotes/Origin/HEAD aux références/télécommandes/Origin/next Cela ne fonctionnera que si refs/remotes/Origin/next existe déjà, sinon il doit être récupéré en premier.

Cela fait effectivement un bon bout de temps (depuis la v1.6.3); Je ne sais pas comment j'ai raté ça!

20
Cascabel

Vous pouvez créer un nouveau fichier sous [.git\refs\remotes\Origin] avec le nom "HEAD" et y mettre le contenu "ref: refs/remotes/Origin/master". Cela devrait résoudre votre problème.

Il semble que le clone d'un dépôt vide conduira à cela. Peut-être que les dépôts vides n'ont pas HEAD car aucun objet de validation n'existe.

Vous pouvez utiliser le

git log --remotes --branches --oneline --decorate

pour voir la différence entre chaque référentiel, alors que le "problème" n'a pas "Origine/HEAD"

Edit: donne un chemin en ligne de commande
Vous pouvez aussi utiliser la ligne de commande git pour faire cela, ils ont le même résultat

git symbolic-ref refs/télécommandes/origine/HEAD refs/télécommandes/origine/maître

2
winterTTr