git: переключить ветку и игнорировать любые изменения без фиксации - PullRequest
277 голосов
/ 20 августа 2009

Я работал над веткой git и был готов зафиксировать свои изменения, поэтому я сделал коммит с полезным сообщением коммита. Затем я рассеянно внес небольшие изменения в код, которые не стоит хранить. Теперь я хочу сменить ветку, но Git дает мне,

ошибка: у вас есть локальные изменения на «X»; не может переключать ветви.

Я думал, что смогу сменить ветку без коммитов. Если так, как я могу настроить это? Если нет, как мне выйти из этой проблемы? Я хочу игнорировать незначительные изменения без фиксации и просто менять ветки.

Ответы [ 12 ]

1 голос
/ 08 июня 2019

Переместить незафиксированные изменения в новую ветку

Я создал псевдоним .gitconfig для этого:

[alias]
spcosp = !"git stash push && git checkout \"$@\" && git stash pop --index #"

Чтобы изменить на new-branch-name, используйте:

git spcosp new-branch-name

И любые незафиксированные изменения файлов и индексов будут сохранены.

0 голосов
/ 30 апреля 2019

Простой ответ:

- принудительно оформить оформление ветки

git checkout -f <branch_name>

Принудительное извлечение ветки говорит git отбросить все изменения, которые вы сделали в текущей ветке, и извлекать желаемое.

или если вы проверяете коммит

git checkout -f <commit-hash>


"думал, что я мог бы сменить ветку без коммитов. Если да, то как я могу настроить это? Если нет, как мне выйти из этой проблемы? "

Ответ на этот вопрос Нет . Это буквально философия Git, согласно которой вы отслеживаете все изменения и каждый узел (т. Е. Коммит) должен быть в курсе последних изменений. вы сделали, если вы, конечно, не сделали новый коммит.


Вы решили сохранить изменения?

Затем спрячьте их, используя

git stash

, а затем, чтобы отменить изменения в нужной ветке, используйте

git stash apply

, который применяет ваши изменения, но также хранит их в очереди хранения. Если вы не хотите хранить их в стеках, вытолкните их с помощью

git stash pop

Это эквивалент apply, а затем drop

...