Чтобы оформить заказ без перезаписи данных

Как ты можешь git-checkout без перезаписи данных?

я бегу

 git checkout master

я получил

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge.

Это удивительно, так как я не знал, что Git сливается, когда я git-checkout, Я всегда бегал за командой отдельно git merge new-feature, Это кажется ненужным, если Git сливается на кассе.

4 ответа

Решение

Git предупреждает вас о том, что в файле forms / answers.php есть изменения в вашей рабочей копии или индексе, которые не были зафиксированы.

Вы можете использовать git-stash для сохранения изменений, а затем git-stash применить для их восстановления.

Обычный вариант использования git-stash - вы работаете над изменениями, но затем должны временно извлечь другую ветку, чтобы исправить ошибку. Таким образом, вы можете сохранить свои изменения в своем индексе и рабочей копии, проверить другую ветку, исправить ошибку, зафиксировать, извлечь исходную ветку и применить git-stash, чтобы восстановить изменения и получить их там, где вы остановились.

Git выполняет двухстороннее слияние несвязанных изменений при переключении веток (используя git checkout <branch>), но обычно он выполняет только тривиальное (на уровне дерева) слияние.

Кроме того git-stash Решением от Karl Voigtland вы можете предоставить дополнительные опции для git checkout, выбрав один из следующих вариантов:

  • Скажите git, чтобы он старался объединить несвязанные изменения с веткой, на которую вы переключаетесь -m / --merge вариант. С помощью этой опции выполняется трехстороннее слияние между текущей веткой, содержимым вашего рабочего дерева и новой веткой, и вы будете в новой ветке.

  • Скажите git перезаписать несвязанные изменения, выбрасывая локальные изменения с -f вариант. Предупреждение: несвязанные изменения будут потеряны!

Вы можете сделать git reset --soft сделать ваш HEAD укажите новую ветку, но оставьте все файлы как есть (включая те, которые были изменены в новой ветке). Тогда вы можете использовать git checkout чтобы получить только те файлы, которые вы действительно хотите из новой ветки.

       git reset [<mode>] [<commit>]
           This form resets the current branch head to <commit> and possibly updates the index (resetting it to the
           tree of <commit>) and the working tree depending on <mode>. If <mode> is omitted, defaults to --mixed.
           The <mode> must be one of the following:

           --soft
               Does not touch the index file or the working tree at all (but resets the head to <commit>, just like
               all modes do). This leaves all your changed files "Changes to be committed", as git status would put
               it.

Якуб также упомянул , но на момент написания я не рекомендую этот вариант.В моем случае произошел сбой с сообщением «Ошибка: Грязный индекс: невозможно объединить», и вся моя рабочая копия была уничтожена без резервного копирования в какой-либо тайник или что-то подобное. Не используйте его, вместо этого используйте традиционный тайник.

Другие вопросы по тегам