2014-10-18 15 views
5

Próbuję cherry wybierz commit z github.git cherry-pick branchless commit na zdalnym

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

O ile mogę powiedzieć, że nie jest częścią żadnej aktywnych oddziałów. Próbowałem to w moim lokalnym repo:

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

otrzymuję ten błąd

fatal: bad revision '469b750' 

Czy to, co staram się robić to możliwe? Szukałem zgubionych, osieroconych i bezgałęziowych zobowiązań, ale nie znalazłem nic, co by pomogło. Mógłbym po prostu skopiować/wkleić to i zrobić z tym, ale staram się zachować historię i dowiedzieć się więcej o git. Dziękuję Ci.

+0

Nie można nawet pobrać zatwierdzenia z pilota, którego nie można uzyskać przez odwołanie (co jest warunkiem wstępnym wyboru). –

+0

Najprawdopodobniej dane zatwierdzenie stało się nieosiągalne po naciśnięciu przycisku "force-push" (zauważ, że jego rodzic, '80ea36256f8ffc6ad59ea5964c919c36327a909d', jest nadal dostępny), ale [jakoś nadal pokazuje się na Githubie] (https://help.github.com/articles/commit-exists-on-github-but-not-in-my -local-clone/# the-branch-that-included-the-commit-was-deleted). – Jubobs

Odpowiedz

5

To nie będzie dokładnie cherry pick, ale można zastosować ten popełnić następująco:

  1. Dodaj .patch do GitHub URL i zapisać go jako plik git patch:

    wget https://github.com/angular/angular.js/commit/469b750019adb193f2b973ab841ac87d0d06d4f2.patch -o new.patch 
    
  2. Zastosuj to zatwierdzenie do swojego drzewa za pomocą git am:

    git am new.patch 
    

Rezultat powinien być identyczny jak wybór wiśni.

+0

Połączone informacje dotyczące badań i samopomocy w odpowiedzi, jeśli nie masz nic przeciwko. – BookOfGreg

+1

@BookOfGreg: dobrze wiadomo, że można pobrać łatki w formacie Git z Github, dodając .patch do adresu URL. – mvp

1

To naprawdę interesujący problem. Sam testowałem to lokalnie, a zatwierdzenie nie pojawiło się w reflog --all, więc nie jest osierocone, ale nie jest pobierane z Github podczas pobierania, klonowania lub pobierania. Może to być przypadek, że zostanie całkowicie utracony na zawsze, chyba że pobierzesz go ręcznie i umieścisz z powrotem w drzewie.

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

+0

Dzięki za potwierdzenie. Widziałem ten artykuł Githuba w moich badaniach, jest solidny. Brak jakichkolwiek informacji na temat selekcji wiśni sugeruje, że nie jest to możliwe. Chcę sprawdzić, czy stackoverflow się zgadza. –

+2

Rozwiązanie mvp pobiera je ręcznie i umieszcza z powrotem w drzewie, więc moje tło było poprawne, ale jego rzeczywistym mechanizmem jest to rozwiązanie. :) – BookOfGreg

0

Szukałem w bitbucket dla konkretnego zatwierdzenia, które zrobił dzisiaj współpracownik, a następnie poszedłem do mojej linii poleceń, aby wybrać, że commit (i serię innych commitów) w innej gałęzi eksperymentalnej git. Zauważyłem, że popełniłem błąd "fatalny: zła wersja" ####### '". To dlatego, że mimo że był w bitbucket, nie było to w moim lokalnym repozytorium git ... Zrobiłem "git pull", aby uzyskać te zatwierdzenia, a następnie wybór cherry działał. To może być rozwiązanie większości problemów z tym błędem Im guessing.