Git normally does this, когда вы проверяете файлы, считая, что внесенные вами изменения не являются файлами, которые будут изменены при оформлении заказа. Например, предположим, что у меня есть следующие файлы в хранилище:
a.txt
b.txt
c.txt
Теперь я буду делать изменения в файл a.txt
:
a.txt (modified)
b.txt
c.txt
Теперь предположим, что у меня есть две другие ветви, a-changed
и b-changed
, в которых a.txt
и b.txt
были изменены соответственно.
Если я попытаюсь проверить b-changed
, Git сделает это без жалобы, потому что мои изменения в рабочем каталоге не противоречат изменениям, внесенным в эту ветку. Однако, если я попытаюсь проверить a-changed
, Git этого не сделает, потому что у меня есть изменения, внесенные в мою локальную копию, и проверка будет сбивать их. Git говорит:
$ git checkout a-changed
error: Your local changes to the following files would be overwritten by checkout:
a.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
Git действительно обеспечивает вам способ, чтобы обойти эту проблему: stash your changes! Это сохраняет ваши текущие изменения в виде патча и отменяет их в рабочем каталоге. То есть, после запуска git stash
, рабочий каталог будет очищен, а ваши изменения помещены в стопку . Затем вы можете проверить нужный филиал и запустить git stash pop
, который выведет ваши изменения из стека и применит их к новому рабочему дереву. Надеюсь, они будут применяться чисто. Если они этого не сделают, вы получите стандартные маркеры конфликтов слияния в a.txt
. Примечательно, что сбой не выскочил со стека, так что вам нужно сделать git stash drop
после того, как вы разрешите слияние.
Вы также можете передать флаг -m
(--merge
) команде checkout, которая указывает, что вы хотите, чтобы ваши изменения были трехсторонними, слиянием с входящими изменениями. Вообще, я предпочитаю скреплять вещи.
Непонятно, что вы просите. Когда вы говорите «мои изменения», вы имеете в виду фиксации предыдущей ветви или измененных файлов или? –
@AndrewC Спасибо, я обновил свой вопрос. –
Ответ 3340 охватывает большинство всего в этом случае. –