Для 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.