Wprowadziłem kilka zmian w moim oddziale i zdałem sobie sprawę, że zapomniałem o innych niezbędnych zmianach w tym oddziale. To, czego chcę, to sposób na połączenie moich ukrytych zmian z bieżącymi zmianami.
Czy jest na to sposób?
To bardziej dla wygody, w końcu poddałem się i popełniłem najpierw moje obecne zmiany, a potem moje ukryte zmiany, ale wolałbym je wprowadzić za jednym zamachem.
Odpowiedzi:
Właśnie odkryłem, że jeśli twoje niezaangażowane zmiany zostaną dodane do indeksu (tzn. „Przeniesione”, używając
git add ...
), wtedygit stash apply
(i przypuszczalniegit stash pop
) faktycznie wykona prawidłowe scalenie. Jeśli nie ma konfliktów, jesteś złoty. Jeśli nie, rozwiąż je jak zwyklegit mergetool
za pomocą edytora lub ręcznie.Dla jasności, oto proces, o którym mówię:
... prawdopodobnie tego szukasz.
tl; dr
Uruchom
git add
pierwszy.źródło
git stash apply --force
.git add .
,git stash apply
a następniegit reset
zastosowałem skrytkę do moich zmian roboczych i scaliłem bez konieczności dokonywania zatwierdzeń.Uruchamianie
git stash pop
lubgit stash apply
jest zasadniczo połączeniem. Nie powinieneś potrzebować zatwierdzać bieżących zmian, chyba że pliki zmienione w skrytce zostaną również zmienione w kopii roboczej, w takim przypadku zobaczysz ten komunikat o błędzie:W takim przypadku nie można zastosować skrytki do bieżących zmian w jednym kroku. Możesz zatwierdzić zmiany, zastosować skrytkę, zatwierdzić ponownie i zmiażdżyć te dwa zatwierdzenia używając,
git rebase
jeśli naprawdę nie chcesz dwóch zatwierdzeń, ale może to być bardziej kłopotliwe niż warte.źródło
git commit --amend
.Oto kolejna opcja, aby to zrobić:
git stash show -p
pokaże łatkę ostatnio zapisanej skrytki.git apply
zastosuje to. Po zakończeniu scalania scaloną skrytkę można upuścićgit stash drop
.źródło
git stash pop
nie robi tego tylko w przypadkach, w których scalanie ma zastosowanie ...git stash show -p --no-color | git apply --3way
(--3way
= cofnij się na łączeniu 3-kierunkowym, jeśli poprawka się nie powiedzie).git stash show -p
tworzy różnicę między ukrytą zawartością a zatwierdzeniem z powrotem, gdy wpis skrytki został utworzony po raz pierwszy . Tak więc zastąpiłoby to zmiany pliku roboczego wprowadzone przez OP.git stash show -p
zostanie scalony przezgit apply
, jeśli będzie to możliwe bez konfliktów.W ten sposób
git add
najpierw to robięgit stash apply <stash code>
. To najprostszy sposób.źródło
Jak sugeruje @Brandan, oto, co musiałem zrobić, aby się obejść
Postępuj zgodnie z tym procesem:
I pozostaniesz z całkowicie scalonymi lokalnymi zmianami
file
, gotowymi do dalszej pracy / czyszczenia lub dokonania pojedynczego dobrego zatwierdzenia. Lub, jeśli znasz scalone zawartośćfile
będzie prawidłowa, można napisać wiadomość montażu i pominąćgit reset HEAD^
.źródło
Być może nie jest to najgorszy pomysł, aby połączyć (poprzez difftool) z ... tak ... oddziału!
źródło
możesz łatwo
źródło
Inną opcją jest wykonanie kolejnego „git stash” lokalnych niezatwierdzonych zmian, a następnie połączenie dwóch skrytek git. Niestety git wydaje się nie mieć sposobu na łatwe połączenie dwóch skrytek. Tak więc jedną z opcji jest utworzenie dwóch plików .diff i zastosowanie ich obu - w każdym razie nie jest to dodatkowe zatwierdzenie i nie wymaga dziesięcioetapowego procesu: |
jak: https://stackoverflow.com/a/9658688/32453
źródło