Это нормально, хотя я немного удивлен одним шагом.
Когда вы переключаетесь с B на A, git видит, что файл должен быть обновлен, чтобы соответствовать версии A, и делает это молчапотому что вы проигнорировали это, сказав, что для ветви B файл не имеет значения.Он должен сделать это - единственная альтернатива - отказаться от проверки ветви А. (Если бы файл не игнорировался, он отказался бы, сказав, что «файл без отслеживания рабочего дерева» будет перезаписан слиянием ». Я действительно удивленв этом случае он тоже этого не делает. У кого-нибудь есть понимание, является ли это функцией или ошибкой?)
Когда вы переключаетесь обратно, git видит, что у ветви B нет этого файла, и удаляетЭто.Опять же, это должно сделать это.У него нет возможности прочесть ваши мысли и понять, что тот проигнорированный файл, который был там минуту назад, - это тот, который вы хотите вернуть назад - он просто дает вам содержимое ветви B, в которой говорится, что файл не существует.
Как рекомендует ewall в комментариях, если вы хотите, чтобы файл пережил эти переходы, он должен отслеживаться всеми ветвями или игнорироваться во всех ветвях.