Ответы, данные до сих пор, не идеальны, потому что они требуют много ненужной работы по разрешению конфликтов слияния, или они делают слишком много предположений, которые часто бывают ложными. Вот как это сделать отлично. Ссылка на мой собственный сайт.
У вас есть незафиксированные изменения, my_branchкоторые вы хотите зафиксировать master, не фиксируя все изменения my_branch.
пример
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
объяснение
Начните с слияния masterс вашей веткой, так как вам все равно придется это делать, и сейчас самое подходящее время для разрешения любых конфликтов.
-uВариант (он же --include-untracked) в git stash -uпредотвращает вас от потери неотслеживаемые файлов , когда вы позже сделать git clean -f -dвнутри master.
После git checkout masterтого, как важно, что вы НЕ делаете git stash pop, потому что вам понадобится этот тайник позже. Если вы поп тайник , созданный в my_branchа затем сделать git stashв master, вы будете вызывать ненужные конфликты слияния , когда вы примените этот тайник в my_branch.
git resetunstages все, что в результате git stash apply. Например, файлы, которые были изменены в тайнике, но не существуют в них, masterставятся как конфликты, «удаленные нами».
git checkout .и git clean -f -dотбросить все, что не зафиксировано: все изменения в отслеживаемых файлах и все неотслеживаемые файлы и каталоги. Они уже сохранены в тайнике и, если их оставить master, вызовут ненужные конфликты слияния при переключении обратно на my_branch.
Последний git stash popбудет основан на оригинале my_branch, и поэтому не вызовет конфликтов слияния. Однако, если ваш тайник содержит неотслеживаемые файлы, которые вы посвятили мастеру, git будет жаловаться на то, что он «не может восстановить неотслеживаемые файлы из тайника». Чтобы разрешить этот конфликт, удалить эти файлы с вашего рабочего дерева, а затем git stash pop, git add ., и git reset.