Dokonałem kilku zatwierdzeń dla różnych plików, ale do tej pory chciałbym wypchnąć do mojego zdalnego repozytorium tylko konkretne zatwierdzenie.
Czy to jest możliwe?
Dokonałem kilku zatwierdzeń dla różnych plików, ale do tej pory chciałbym wypchnąć do mojego zdalnego repozytorium tylko konkretne zatwierdzenie.
Czy to jest możliwe?
Odpowiedzi:
Push up przez danego popełnienia, można napisać:
git push <remotename> <commit SHA>:<remotebranchname>
pod warunkiem, że <remotebranchname>
już istnieje na pilocie. (Jeśli nie, możesz użyć go git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
do automatycznego utworzenia).
Jeśli chcesz wypchnąć zatwierdzenie bez wypychania poprzednich zatwierdzeń, powinieneś najpierw użyć git rebase -i
do ponownego zamówienia zatwierdzeń.
git push <remotename> <commit SHA>:<remotebranchname>
Pracuje. sztuką jest połączenie go z, git rebase -i
aby przenieść zatwierdzenie, które chcesz jako pierwsze zatwierdzenie, i określić, że commit-sha
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. Następnie naciśnij przycisk zgodnie z opisem w odpowiedzi.
git push origin HEAD~1:master
.
-f
flagi.
Innych odpowiedzi brakuje w opisach zmiany kolejności.
git push <remotename> <commit SHA>:<remotebranchname>
wypchnie pojedynczy zatwierdzenie, ale to zatwierdzenie musi być NAJSTARSZE z twojego lokalnego, niezepchniętego, zatwierdzenia, nie należy mylić go z górnym, pierwszym lub tip tip, które są moim zdaniem niejednoznacznymi opisami. Zatwierdzenie musi być zgodne z najstarszym z zatwierdzeń, tj. Najdalszym od ostatniego zatwierdzenia. Jeśli nie jest to najstarsze zatwierdzenie, wówczas wszystkie zatwierdzenia od najstarszej, lokalnej, niepopchniętej SHA do określonej SHA zostaną wypchnięte. Aby zmienić kolejność zatwierdzeń, użyj:
git rebase -i HEAD~xxx
Po zmianie kolejności zatwierdzenia możesz bezpiecznie wepchnąć ją do zdalnego repozytorium.
Podsumowując, użyłem
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
wcisnąć jeden zatwierdzenie do mojej zdalnej gałęzi master.
Bibliografia:
Zobacz też:
Sugerowałbym użycie git rebase -i
; przenieś zatwierdzenie, które chcesz wypchnąć na szczyt zatwierdzonych zmian. Następnie użyj, git log
aby uzyskać SHA ponownego zatwierdzenia, sprawdź go i wciśnij. Rebase zapewni, że wszystkie twoje zatwierdzenia będą teraz dziećmi tego, którego wypchnąłeś, więc przyszłe wypychania również będą działały dobrze.
git log
krok?
Cherry-pick działa najlepiej w porównaniu ze wszystkimi innymi metodami, jednocześnie wypychając określone zatwierdzenie.
Sposobem na to jest:
Utwórz nowy oddział -
git branch <new-branch>
Zaktualizuj swoją nową gałąź o gałąź pochodzenia -
git fetch
git rebase
Te działania zapewnią, że masz dokładnie te same rzeczy, co twoje pochodzenie.
Wybierz to sha id
, co chcesz zrobić push -
git cherry-pick <sha id of the commit>
Możesz uzyskać sha id
, uruchamiając
git log
Przekaż to do swojego pochodzenia -
git push
Uruchom, gitk
aby zobaczyć, że wszystko wygląda tak, jak chcesz.
git rebase -i
będzie idealnym rozwiązaniem, jak sugerowano w powyższych rozwiązaniach. Wybrania wiśniowego można używać tylko wtedy, gdy chcesz powielić zatwierdzenie.
Uważam, że musiałbyś „przywrócić” do tego zatwierdzenia, a następnie go wcisnąć. Lub możesz cherry-pick
zatwierdzić do nowej gałęzi i wypchnąć ją do gałęzi w zdalnym repozytorium. Coś jak:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
zatwierdzenie, które chcesz.
Możesz również w innym katalogu: