Чтобы оформить заказ без перезаписи данных
Как ты можешь 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.
Якуб также упомянул