2014-10-10 1 views
6

В Git, как бы я проверил старшую ветвь, сохранив все мои изменения из текущей ветви, но они будут просто отмечены как незафиксированные изменения или новые файлы.Git: Обратите внимание на ветку, где хранятся незафиксированные изменения.

Есть ли такая команда, как git checkout-but-keep-changes branch_name?

+0

Непонятно, что вы просите. Когда вы говорите «мои изменения», вы имеете в виду фиксации предыдущей ветви или измененных файлов или? –

+0

@AndrewC Спасибо, я обновил свой вопрос. –

+0

Ответ 3340 охватывает большинство всего в этом случае. –

ответ

-1

Я искал мерзавец сброса --Мягкого

Извините мой вопрос была не очень понятным.

10

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, которая указывает, что вы хотите, чтобы ваши изменения были трехсторонними, слиянием с входящими изменениями. Вообще, я предпочитаю скреплять вещи.

Смежные вопросы