пятый комит взялся потому, что мне пришлось руками делать слияние в одном конфликтном файле и потом комитить
git pull --rebase тогда вместо слияния, ваша ветка просто пересадится на вершину внешней и лополнительных коммитов в истории не будет.
git checkout -- file или git reset -- file.
git worktree add <dir>
git reset origin/main -- package.lock
git commit
git push
git rebase -i <SHA>
Да. Вы можете зафиксировать в скопированном коммите только те изменения, которые вам нужны. Не обязательно копировать всё.