Git: включить ветвь и игнорировать любые изменения без фиксации
Я работал над ветвью git и был готов выполнить мои изменения, поэтому я сделал коммит с полезным сообщением о фиксации. Затем я рассеянно внес небольшие изменения в код, который не стоит хранить. Теперь я хочу изменить ветки, но git дает мне,
Ошибка: у вас есть локальные изменения в "X"; не может переключать ветки.
Я думал, что могу менять ветки, не совершая. Если да, то как я могу это настроить? Если нет, как мне избавиться от этой проблемы? Я хочу игнорировать незначительные изменения без фиксации и просто изменять ветки.
Ответы
Ответ 1
Вам нужно чистое состояние, чтобы сменить ветки. Оформление ветки будет разрешено только в том случае, если это не повлияет на "грязные файлы" (как отмечают Чарльз Бейли в комментариях).
В противном случае вам следует:
- спрятать ваше текущее изменение или
reset --hard HEAD
(если вы не против потерять эти незначительные изменения) или
checkout -f
(При переключении ветвей продолжайте работу, даже если индекс или рабочее дерево отличается от HEAD. Это используется для исключения локальных изменений.)
Или, совсем недавно:
Продолжайте, даже если индекс или рабочее дерево отличается от HEAD.
И индекс, и рабочее дерево восстанавливаются в соответствии с целью переключения.
Это отличается от git switch -m <branch-name>
, который запускает трехстороннее слияние между текущей веткой, содержимым вашего рабочего дерева и новой веткой: готово: таким образом вы не потеряете свою работу в процессе.
Ответ 2
Если вы хотите отменить изменения,
git checkout -- <file>
git checkout branch
Если вы хотите сохранить изменения,
git stash save
git checkout branch
git stash pop
Ответ 3
ну, это должно быть
git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
Ответ 4
Следуйте,
$: git checkout -f
$: git checkout next_branch
Ответ 5
Обратите внимание, что если вы объединили удаленные ветки или получили локальные коммиты и хотите вернуться к удаленной HEAD, вы должны сделать:
git reset --hard origin/HEAD
HEAD
только будет ссылаться только на локальный commit/merge - несколько раз я забыл, что при перезагрузке и заканчивая тем, что "ваш репозиторий X совершает движение вперед", когда я полностью намерен уничтожить ВСЕ изменения/фиксации и вернитесь к удаленной ветке.
Ответ 6
Если вы внесли изменения в файлы, которые Git также необходимо изменить при переключении ветвей, это не позволит вам. Чтобы отказаться от рабочих изменений, используйте:
git reset --hard HEAD
Затем вы сможете переключать ветки.
Ответ 7
Ни один из этих ответов не помог мне, потому что у меня все еще были неотслеженные файлы даже после сброса и тайника. Я должен был сделать:
git reset --hard HEAD
git clean -d -f
Ответ 8
переход на новую ветку теряет изменения:
git checkout -b YOUR_NEW_BRANCH_NAME --force
переключение на существующую ветку с потерей изменений:
git checkout YOUR_BRANCH --force
Ответ 9
Закройте терминал, удалите папку, в которой находится ваш проект, затем снова клонируйте ваш проект и вуаля.
Ответ 10
Если вы хотите сохранить изменения и изменить ветку в одной строке
git stash && git checkout <branch_name> && git stash pop
Ответ 11
Переместить незафиксированные изменения в новую ветку
Я создал псевдоним .gitconfig
для этого:
[alias]
spcosp = !"git stash push && git checkout \"[email protected]\" && git stash pop --index #"
Чтобы изменить на new-branch-name
, используйте:
git spcosp new-branch-name
И любые не зафиксированные изменения файла и индекса будут сохранены.
Ответ 12
Простой ответ:
это заставить оформить ветку
git checkout -f <branch_name>
Принудительное извлечение ветки говорит git об отмене всех изменений, которые вы сделали в текущей ветке, и извлекает желаемое.
или в случае, если вы проверяете коммит
git checkout -f <commit-hash>
"Я думал, что могу сменить ветки без коммитов. Если так, как я могу это настроить? Если нет, как мне выйти из этой проблемы?"
Ответ на этот вопрос - нет, буквально философия Git заключается в том, что вы отслеживаете все изменения, и что каждый узел (т.е. Коммит) должен быть в курсе последних внесенных вами изменений, если только вы не сделал новый коммит конечно.
Вы решили сохранить изменения?
Затем спрятать их, используя
git stash
а затем, чтобы распаковать изменения в нужной ветке, используйте
git stash apply
который применяет ваши изменения, но также сохраняет их в очереди хранения. Если вы не хотите хранить их в стеке, скопируйте их, используя
git stash pop
Это эквивалент apply
а затем drop