Как я понимаю, Git Stash - это коллекция различий.Если Git Stash сохраняет Diffs, то почему он не может быть применен к другой ветке?
Так, например, если у меня есть целый репозиторий с одним файлом foo.txt
В 32 строк файла просто
Lorem Ipsum 01
Lorem Ipsum 02
Lorem Ipsum 03
...
Lorem Ipsum 30
a first line: good
a second line: bad
И я совершил все.
Теперь я создаю новую ветвь:
git checkout -b feature123
И теперь, когда я нахожусь на этой ветке, я меняю слово good
к better
и bad
к worse
.
Теперь, только предположим, что мой менеджер программ приходит и говорит: «Срочно! Мы должны изменить 01 на 011 и 02 на 022».
Так что копить изменения, а затем изменить в master
отрасли:
git stash
git checkout master
и я изменил 01
к 011
и 02
к 022
, как он просил.
И сказать, я хочу, чтобы включить изменения, которые я «спрятано» ранее в master
отрасли:
git stash apply
но выдаст ошибку:
error: Your local changes to the following files would be overwritten by merge:
foo.txt
Please, commit your changes or stash them before you can merge.
Aborting
Почему? Не может ли он применить набор различий к foo.txt
?
(PS Я могу совершить первую, а затем использовать git stash apply
, и быть в состоянии применить эти к foo.txt
посмотреть различие Но почему не раньше, чем совершить Так git stash
на самом деле просто экономит коллекцию файлов изменений - повторить именно:.? Коллекцию из файлов изменений, а затем сделать git checkout .
(отказаться от всех изменений) Это правда)
Вы совершили изменения, которые вы сделали, прежде чем пытаться применить изменения stash'd? – sisyphus
@sisyphus Вопрос в том, почему изменения должны быть совершены (или спрятаны), и почему 'git stash' не может« применять »исправления к измененным файлам. – tobiasvl
Это механизм безопасности, я очень рад, что он не будет просто перезаписывать мои изменения, даже если у меня будет возможность их сценировать. – Creynders