Próbuję wybrać najlepszy commit od mastera i przenieść go do obecnej gałęzi produkcji. Jednak kiedy wykonuję git cherry-pick <SHA-hash>
, po prostu otrzymuję ten komunikat:
# On branch prod_20110801
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# site/test-result/
nothing added to commit but untracked files present (use "git add" to track)
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:
git commit --allow-empty
Otherwise, please use 'git reset'
Uwaga: próbowałem wykonać reset i reset - twardy HEAD ^ i żaden z nich nie wydawał się niczego zmieniać.
Nie wiem, dlaczego to nie działa dla mnie.
Wszelkie spostrzeżenia, porady lub pomysły, jak rozwiązać ten problem, byłyby pomocne ~!
git
branching-and-merging
cherry-pick
Jay Taylor
źródło
źródło
Odpowiedzi:
Git traktuje wybór wiśniowy jako nie-op - wszystkie zmiany wprowadzone przez to zatwierdzenie zostały wprowadzone przez zatwierdzenie w Twojej bieżącej gałęzi. (A przynajmniej tak myśli Git). Sprawdź, czy zatwierdzenie, które wybierasz, nie zostało już w jakiś sposób scalone, jako poprawne scalanie, rebase / cherry-pick lub fragmentaryczna łatka. (Użyj,
git show <commit-id>
aby zobaczyć różnicę.)źródło
W moim przypadku doprowadzało mnie to do szału, ponieważ było dość oczywiste, że konkretny commit, który chciałem wybrać, nie został włączony do mojej obecnej gałęzi.
Okazuje się, że ktoś już tydzień wcześniej wybrał zobowiązanie. Te zmiany , ale nie konkretne SHA, były już w moim obecnym oddziale, a ja ich nie zauważył.
Sprawdź plik (i), które próbujesz wybrać. Jeśli mają już zmiany, wersja zatwierdzenia została już wybrana lub dodana w inny sposób. Nie ma więc potrzeby ponownego wybierania go.
źródło
git log --graph --pretty --decorate --oneline
aby zobaczyć, czy dany SHA znajduje się w mojej gałęzi, czy nie. Zobacz moją odpowiedź poniżej o tym, jak możesz się pomieszać, myśląc, że komunikat o zmianach wskazuje na zmianę - jest sytuacja, w której tak nie jest i to pierwotnie doprowadziło mnie do tego pytania. Mózg ma tendencję do wybierania tych skrótów i czasami może wrócić, by cię ugryźć.Zauważ również, że dodanie pustego pliku (np.
.gitkeep
) Do drzewa jest traktowane przez cherry-pick jako puste zatwierdzenie.źródło
Tak więc, oto kolejna myląca sytuacja, w której może się to zdarzyć: miałem następujące rzeczy:
Próbowałem wybrać 9a7b12e, co najwyraźniej jest niczym - nawet próbował mi powiedzieć w tej linii w danych wyjściowych dziennika git, że 4497428 jest tym, czego naprawdę chciałem. (To, co zrobiłem, to po prostu wyszukałem komunikat o zatwierdzeniu i złapałem pierwszy hash, jaki widziałem, który go zawiera). W każdym razie, po prostu chcę, aby ludzie wiedzieli, że jest inny sposób, w jaki możesz dać się oszukać, próbując wybrać opcję „no op”.
źródło