git stash - > merge stashed change with current changes

Dokonałem kilku zmian w mojej gałęzi i zdałem sobie sprawę, że zapomniałem, że ukryłem kilka innych niezbędnych zmian w tej gałęzi. Chcę połączyć moje ukryte zmiany z bieżącymi zmianami.

Jest na to sposób?

Jest bardziej dla wygody, w końcu poddałem się i popełniłem najpierw moje obecne zmiany, a następnie moje ukryte zmiany, ale wolałbym je wprowadzić jednym zamachem.

Author: SQB, 2012-07-26

5 answers

Właśnie odkryłem, że jeśli Twoje niezatwierdzone zmiany zostaną dodane do indeksu (np." zainscenizowane", używając " git add ..."), a następnie "git stash apply" (i, prawdopodobnie, "Git stash pop") zrobi właściwe scalenie. Jeśli nie ma konfliktów, jesteś złoty. Jeśli nie, rozwiąż je jak zwykle za pomocą "git mergetool" lub ręcznie za pomocą edytora.

Żeby było jasne, to jest proces, o którym mówię:

mkdir test-repo && cd test-repo && git init
echo test > test.txt
git add test.txt && git commit -m "Initial version"

# here's the interesting part:

# make a local change and stash it:
echo test2 > test.txt
git stash

# make a different local change:
echo test3 > test.txt

# try to apply the previous changes:
git stash apply
# git complains "Cannot apply to a dirty working tree, please stage your changes"

# add "test3" changes to the index, then re-try the stash:
git add test.txt
git stash apply
# git says: "Auto-merging test.txt"
# git says: "CONFLICT (content): Merge conflict in test.txt"

... pewnie tego szukasz.

 184
Author: Joshua Warner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-17 16:25:02

Uruchamianie git stash pop lub git stash apply jest zasadniczo połączeniem. Nie powinieneś musieć zatwierdzać bieżących zmian, chyba że pliki zmienione w skrytce zostaną również zmienione w kopii roboczej, w takim przypadku zobaczysz komunikat o błędzie:

error: Your local changes to the following files would be overwritten by merge:
       file.txt
Please, commit your changes or stash them before you can merge.
Aborting

W takim przypadku nie możesz zastosować skrytki do bieżących zmian w jednym kroku. Możesz zatwierdzić zmiany, zastosować skrytkę, zatwierdzić ponownie i usunąć te dwa commity używając git rebase, jeśli naprawdę nie chcesz dwóch commitów, ale może to być więcej kłopoty, które są warte.

 66
Author: Brandan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-26 19:24:56

Chcę sposobu na połączenie moich ukrytych zmian z bieżącym zmiany

Oto inna opcja, aby to zrobić:

git stash show -p|git apply
git stash drop

git stash show -p pokaże łatkę z ostatniej przechowalni. git apply zastosuje go. Po połączeniu, scalony Schowek może zostać upuszczony przez git stash drop.

 14
Author: ks1322,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 15:22:17

Zgodnie z sugestią @Brandan, oto co musiałem zrobić, aby obejść

error: Your local changes to the following files would be overwritten by merge:
       file.txt
Please, commit your changes or stash them before you can merge.
Aborting

Wykonaj ten proces:

git status  # local changes to `file`
git stash list  # further changes to `file` we want to merge
git commit -m "WIP" file
git stash pop
git commit -m "WIP2" file
git rebase -i HEAD^^  # I always use interactive rebase -- I'm sure you could do this in a single command with the simplicity of this process -- basically squash HEAD into HEAD^
# mark the second commit to squash into the first using your EDITOR
git reset HEAD^

I pozostaną Ci w pełni połączone lokalne zmiany na file, gotowe do dalszej pracy/sprzątania lub zrobienia jednego dobrego commita. Lub, jeśli wiesz, że scalona zawartość file będzie poprawna, możesz napisać odpowiednią wiadomość i pominąć git reset HEAD^.

 0
Author: knickum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-13 16:15:59

Inną opcją jest wykonanie kolejnego "Git stash" lokalnych zmian, a następnie połączenie dwóch Git Stash. Niestety git wydaje się nie mieć sposobu na łatwe Połączenie dwóch stashów. Więc jedną z opcji jest utworzenie dwóch .pliki diff i zastosuj je obie--w przeciwnym razie nie jest to dodatkowy commit i nie wiąże się z dziesięciostopniowym procesem: /

Jak: https://stackoverflow.com/a/9658688/32453

 -1
Author: rogerdpack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:03