Для git проверки без перезаписи данных
Как вы можете 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 сливается при оформлении заказа.
Ответы
Ответ 1
Git предупреждает вас, что формы /answers.php имеют изменения в вашей рабочей копии или индексе, которые не были зафиксированы.
Вы можете использовать git-stash, чтобы сохранить изменения, затем git -stash apply, чтобы восстановить их.
Общий пример использования git -stash заключается в том, что вы работаете над изменениями, но затем должны временно проверить другую ветку, чтобы исправить ошибку. Таким образом, вы можете занести свои изменения в свой индекс и рабочую копию, проверить другую ветку, исправить ошибку, зафиксировать, проверить исходную ветку и git -stash применить, чтобы восстановить ваши изменения и выбрать где вы остановились.
Ответ 2
Git выполняет двухстороннее слияние нечетких изменений при переключении ветвей (используя git checkout <branch>
), но обычно он выполняет только тривиальное (древовидное) слияние.
Помимо решения git-stash
Karl Voigtland, вы можете предоставить дополнительные опции Git checkout, выберите один из следующих вариантов:
-
Скажите git на попытаться слить несанкционированные изменения в ветку, с которой вы переключаетесь с опцией -m
/--merge
. С помощью этой опции выполняется трехстороннее слияние между текущей ветвью, содержимым рабочего дерева и новой веткой, и вы будете в новой ветке.
-
Сообщите git перезаписать неуспешные изменения, отбросив локальные изменения с помощью опции -f
. Предупреждение: неучтенные изменения будут потеряны!
Ответ 3
Вы можете выполнить 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.