Ответы, данные до сих пор, не идеальны, потому что они требуют много ненужной работы по разрешению конфликтов слияния, или они делают слишком много предположений, которые часто бывают ложными. Вот как это сделать отлично. Ссылка на мой собственный сайт.
У вас есть незафиксированные изменения, 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 reset
unstages все, что в результате 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
.