2014-10-18 4 views
5

Ich versuche, ein Commit von Github Kirsche auswählen.git cherry-pick verzweigtes Commit auf remote

https://github.com/angular/angular.js/commit/469b750019adb193f2b973ab841ac87d0d06d4f2

Soweit ich sagen kann, ist es kein Teil von irgendwelchen aktiven Zweige. Ich habe versucht, dies in meinem lokalen Repo:

git remote add upstream https://github.com/angular/angular.js.git 
git fetch upstream 
git cherry-pick 469b750 

ich diesen Fehler

fatal: bad revision '469b750' 

Ist das, was ich versuche möglich zu tun? Ich suchte nach verlorenen, verwaisten und zwerglosen Commits, aber ich fand nichts, was half. Ich könnte das einfach kopieren und einfügen und damit fertig sein, aber ich versuche die Geschichte zu behalten und mehr über Git zu lernen. Vielen Dank.

+0

Es gibt keine Möglichkeit, ein Commit von einer Remote zu holen, die nicht über eine Referenz erreichbar ist (was eine Voraussetzung für die Auswahl ist). –

+0

Höchstwahrscheinlich ist das Commit nach einem Force-Push nicht mehr erreichbar (Beachten Sie, dass das übergeordnete Element "80ea36256f8ffc6ad59ea5964c919c36327a909d" immer noch erreichbar ist, aber [irgendwie immer noch auf Github angezeigt wird] (https://help.github.com/articles/commit-exists-on-github-but-not-in-my -local-clone/# der-Zweig-der-enthalten-der-Commit-wurde-gelöscht. – Jubobs

Antwort

5

Es wird nicht genau sein Kirsche Pick, aber Sie können diese begehen gelten wie folgt:

  1. hinzufügen .patch auf Github URL und als git Patch-Datei speichern:

    wget https://github.com/angular/angular.js/commit/469b750019adb193f2b973ab841ac87d0d06d4f2.patch -o new.patch 
    
  2. Wenden Sie dieses Commit auf Ihren Baum mit git am:

    git am new.patch 
    

Ergebnis dieser sollte Rosinenpickerei identisch sein.

+0

Kombinierte Forschung und Selbsthilfe-Informationen in Ihre Antwort, wenn Sie nichts dagegen haben. – BookOfGreg

+1

@BookOfGreg: Es ist bekannt, dass Sie git-formatierte Patches von Github erhalten können, indem Sie .patch zu url hinzufügen.Außerdem benutze ich oft 'git format-patch -1' /' git am' combo anstelle von Rosinenpickeln - ich finde es bequemer. Deshalb habe ich dies als Lösung vorgeschlagen. – mvp

1

Das ist ein wirklich interessantes Problem. Ich habe es lokal getestet und das Commit erscheint nicht in reflog --all, so dass es nicht nur verwaist ist, aber es wird nicht von Github heruntergeladen, wenn es gezogen, geklont oder abgerufen wird. Es kann ein Fall sein, dass es für immer verloren ist, es sei denn Sie laden es manuell herunter und setzen es zurück in den Baum.

https://help.github.com/articles/commit-exists-on-github-but-not-in-my-local-clone/

+0

Danke für die Bestätigung. Ich habe diesen GitHub-Artikel in meinen Nachforschungen gesehen, er ist solide. Das Fehlen von Informationen über das Rosinenpicken deutet darauf hin, dass dies nicht möglich ist. Ich möchte sehen, ob Stackoverflow stimmt. –

+2

Die Lösung von mvp lädt es manuell herunter und legt es zurück in den Baum, so dass mein Hintergrund korrekt war, aber sein tatsächlicher Mechanismus dafür ist die Lösung. :) – BookOfGreg

0

Ich suchte in Bitbucket für einen bestimmten Commit einen Mitarbeiter hat heute und dann ging zu meiner Kommandozeile, um diese Commit (und eine Reihe anderer Commits) in eine andere experimentelle Git Zweig verzweigen. Mir ist aufgefallen, dass ich diesen "fatal: bad revision '#######" Fehler mache. Es ist, obwohl es in bitbucket war, war es nicht in meinem lokalen Git Repo ... Ich habe einen "Git Pull", um diese Commits zu bekommen, und dann die Kirsche Pick arbeitete. Das könnte die Lösung für die meisten Probleme mit diesem Fehler sein.