Вот воспроизводимый пример проблемы я ввязался:Re-сращивание после «Selective» или «Частичная» Слияние
установки
mkdir test-git
cd test-git
git init
echo 'Hello, world.' > file1.txt
git add .
git commit -m 'init commit'
git branch branch2
git checkout branch2
echo 'Hello, universe' > file1.txt
echo 'Foobar' > file2.txt
git add .
git commit -m 'commit 2'
Я хотел объединить branch2 в мастер но только изменения в file1.txt
, так вот что я сделал:
git checkout master
git merge branch2 --no-commit --no-ff
git reset -- file2.txt
git commit -m 'Partially Merged Branch2 into Master!'
так вот, где я понял, что не могло бы быть хорошим язь a ... Предположим, я передумал, и теперь я хочу объединить файл file2.txt. Я могу запустить:
git merge branch2
Ответ: Уже уточненный.
Если я бегу git diff branch2 --name-status
он возвращает D file2.txt
, так что я думаю, когда я unstaged file2.txt это отслеживали это как удаление? Я до сих пор не понимаю, почему я не могу слиться, и он не добавит файл (я, очевидно, не очень хорошо понимаю алгоритм слияния git).
К сожалению, мой сценарий в настоящее время намного сложнее, поэтому я не могу точно отменить фиксацию. Есть ли простой способ устранить различия между master
и branch2
, без переписывания истории?
Ya, что полностью имеет смысл. Несмотря на использование git в течение многих лет, я начинаю понимать, что у меня действительно нет такого твердого понимания, как я, хотя и сделал. Не переписывал бы мастер в init commit, а затем перезаписывал историю причин, чтобы переписать? – NSjonas
Действительно будет. Обновлен ответ. – user3159253