web-dev-qa-db-fra.com

Il n'y a rien à comparer. Rien à comparer, les branches sont des histoires totalement différentes

J'ai un thème CMS installé sur ma machine. Je suis en train de suivre les modifications apportées via git Et j'ai décidé de le sauvegarder sur GitHub afin que je puisse partager ces modifications.

Le thème fourni est également disponible sur GitHub. Sur ma machine, j'ai ajouté Ceci comme une télécommande en amont. Maintenant, je peux facilement voir les changements entre mon maître .__ et la télécommande en amont en utilisant la commande suivante:

git diff --color master upstream/number

Si je pouvais ajouter la télécommande en amont sur GitHub, je pourrais facilement partager ces modifications .. Est-il possible de définir cette relation sur GitHub?

J'ai essayé ce qui suit:

git Push -u Origin upstreambranch

ce qui ajoute une upstreambranch au maître sur GitHub. Même si essayer de comparer les deux branches ne fonctionne pas, le résultat obtenu sur GitHub est le suivant: "Il n'y a rien à comparer"

Existe-t-il une autre façon de comparer ces

20
Jack

La réponse courte

Il semble que GitHub ne vous laissera pas comparer les branches carelles ne partagent pas la même histoire,même si elles peuvent partager Une grande partie de la même fichiers et code.

Voici une capture d'écran de la fourchette temporaire que j'ai créée pour votre dépôt, dans laquelle j'ai essayé: __.compare master avec le upstreambranch, comme vous l'avez décrit. Notez le message d'erreur :

Error message screenshot

Ça dit:

Il n'y a rien à comparer.

master et upstreambranch sont des historiques de validation totalement différentes.

La longue réponse

Vous avez probablement téléchargé la source d'origine et l'avez ajoutée à un tout nouveau repo Au lieu de cloner le repo d'origine, n'est-ce pas? Cela fera en sorte que l’histoire de votre repo seracomplètement différentede l’historique du Du repo original, car votre nouveau repo n’aura plus le même contenu. commet avec les mêmes identifiants sha.

Vous pouvez voir cela en faisant un journal inverse de votre branche master et du upstreambranch:

# Your first commit, see commit sha
git log --reverse master
commit c548d7b1b16b0350d7fbdb3ff1cfedcb38051397 # <== HERE
Author: Padraic Stack <[email protected]>
Date:   Wed Apr 2 15:11:28 2014 +0100

    First commit of everything

# First commit sha of the original repo
git log --reverse upstreambranch
commit 105a12817234033c45b4dc7522ff3103f473a862 # <== THERE
Author: Jeremy Boggs <[email protected]>
Date:   Mon Feb 22 16:00:53 2010 +0000

    Creates repo directories for the Seasons theme.

Solutions

Si vous refaites vos commits en plus de l’historique original, vous devriez alors pouvoir comparer les branches. Il y a plusieurs façons de refaire vos commits , Y compris

git rebase --onto

et

git cherry-pick

Vous pouvez également refaire chaque commit manuellement, si vous devez le faire.

31
user456814

Cela ressemble à un comportement indésirable de la part de github, mais c'est assez facile à corriger. Ce que vous voulez faire est de rebaser votre branche sur un commit raisonnable ( aucun raisonnable) dans l'historique existant. Ce que vous pouvez faire est d'aller chercher le dépôt github et trouver quel arbre de son histoire ressemble le plus à celui avec lequel vous avez commencé. Commencez de cette façon:

git remote add github u://r/l
git fetch github

myroot=`git rev-list master --max-parents=0`
root_tree=`git rev-parse $myroot^{tree}`

github_base=`git log --pretty=%H\ %T github/master | sed -n "s/$root_tree//p"`

Avec un peu de chance, cela vous trouvera un commit dans l’histoire de github qui a l’arbre exact avec lequel vous avez commencé. En supposant que ce soit le cas, 

git rebase --onto $github_base $myroot master 

et tu as fini.


Si cela ne trouve pas d'arbre correspondant, vous obtenez une approximation la plus proche. Voici un moyen d'obtenir une estimation approximative des différences:

git log --pretty='echo %H $(git diff-tree -p -b -U0 '$myroot:' %T|wc -l)' github/master \
| sh

qui comptera les lignes dans un diff minimisé entre l’arbre de chaque commit dans l’historique github/master et votre arbre racine. Il semble raisonnable d’espérer une petite différence de Nice, vous pouvez regarder les différences réelles avant d’appeler le github_base commettre et de refaire la base ci-dessus.


6
jthill

Si vous savez à partir de quel problème de validation a commencé, vous pouvez réinitialiser votre branche sur cette validation puis les fusionner.

2
mrserfr

C’est ce qui m’est arrivé hier parce que j’ai téléchargé le code du dépôt initial et que j’essayais de le repousser sur mon repo forké, de passer autant de temps à la recherche de la résolution du problème "Erreur impossible" et de le pousser avec force.

Solution:

Il vous suffit de reformer le référentiel en supprimant le référentiel précédent et de le cloner dans un nouveau dossier.

Remplacez le fichier par l'ancien dans le nouveau dossier et appuyez dessus pour le repo et faites une nouvelle demande d'extraction.

1
Lakshay

J'ai trouvé qu'aucune des réponses fournies ne fonctionnait réellement pour moi; ce qui a réellement fonctionné pour moi est de faire:

git Push --set-upstream Origin *BRANCHNAME*

Après avoir créé une nouvelle branche, celle-ci est correctement suivie. (J'ai Git 2.7.4)

0
AnthonyC

J'ai eu un problème où je poussais vers mon référentiel à distance à partir d'un référentiel local qui ne correspond pas à l'historique de remote. C'est ce qui a fonctionné pour moi.

J'ai cloné mon repo localement afin de savoir que je travaillais avec une nouvelle copie du repo:

git clone Your_REPO_URL_HERE.git

Basculez vers la branche que vous essayez d’entrer dans la télécommande:

git checkout Your_BRANCH_NAME_HERE

Ajouter la télécommande de l'original:

git remote add upstream Your_REMOTE_REPO_URL_HERE.git

Faites un git chercher et git pull:

git fetch --all

git pull upstream Your_BRANCH_NAME_HERE

Si vous avez des conflits de fusion, résolvez-les avec

git mergetool kdiff3 

ou un autre outil de fusion de votre choix.

Une fois les conflits résolus et enregistrés. Commit et Push changes.

Allez maintenant dans le dépôt gitub.com de l'original et essayez de créer une demande d'extraction. Vous devez avoir la possibilité de créer une demande d'extraction et de ne pas voir la liste "Rien à comparer, les branches sont des historiques de validation totalement différents" Remarque: vous devrez peut-être comparer les forks pour votre demande d'extraction.

0
Chris Adams

J'ai reçu ce message d'erreur, car je migrais une application de SVN vers GitHub et il ne suffit pas d'appeler un git init à l'emplacement du code source extrait de SVN, mais vous devez appeler un git. svn clone afin d'avoir tout l'historique de commit . De cette façon, les deux codes sources sur GitHub auront un historique commun et j'ai pu ouvrir des requêtes d'extraction.

0
Adam Bodrogi

Je ne pense pas que nous ayons le même cas ici , mais quand même une autre personne pourrait le trouver utile .

Quand une erreur similaire m'est survenue, cela allait être la première fusion et le premier commit. Il n'y avait rien dans le référentiel en ligne . Par conséquent, il n'y avait pas de code sur git-hub avec lequel comparer.

J'ai simplement supprimé le référentiel vide et créé un nouveau avec le même nom. .__ Et alors il n'y avait pas d'erreur.

0