Got something like that in practice with backup recovery - IRL most probably the sequence of events leading to that discrepancy was different (not clear yet).

```sql
drop table enum_alter_issue;
create table enum_alter_issue (a Enum8('one' = 1, 'two' = 2)) engine = ReplicatedMergeTree('/clickhouse/tables/enum_alter_issue', 'test') ORDER BY a;

-- backup / move part aside or similar operation 
insert into enum_alter_issue values ('one'), ('two');
alter table enum_alter_issue detach partition id 'all';

-- schema evolution (enum get extended)
alter table enum_alter_issue modify column a Enum8('one' = 1, 'two' = 2, 'three' = 3);
insert into enum_alter_issue values ('one'), ('two');
alter table enum_alter_issue detach partition id 'all';

-- attempt to attach back all the parts (new generation and old generation)
alter table enum_alter_issue attach partition id 'all';

Received exception from server (version 21.9.1):
Code: 53. DB::Exception: Received from localhost:9000. DB::Exception: Type mismatch for column a. Column has type Enum8('one' = 1, 'two' = 2, 'three' = 3), got type Enum8('one' = 1, 'two' = 2). 
```
const Names & column_names, const NamesAndTypesList & virtuals, const StorageID & storage_id) const
{
    Block res;
    HashMapWithSavedHash<StringRef, const DataTypePtr *, StringRefHash> virtuals_map;
    
    
    for (const auto & column : virtuals)
        virtuals_map[column.name] = &column.type;
    for (const auto & name : column_names)
    {
        auto column = getColumns().tryGetColumnOrSubcolumn(ColumnsDescription::All, name);
        if (column)
        {
            res.insert({column->type->createColumn(), column->type, column->name});
        }
        else if (auto * it = virtuals_map.find(name); it != virtuals_map.end())
        {
            const auto & type = *it->getMapped();
            res.insert({type->createColumn(), type, name});
        }
        else
            throw Exception(
                "Column " + backQuote(name) + " not found in table " + (storage_id.empty() ? "" : storage_id.getNameForLogs()),
                ErrorCodes::NOT_FOUND_COLUMN_IN_BLOCK);
    }
    return res;
}
const KeyDescription & StorageInMemoryMetadata::getPartitionKey() const