If the API name is the same, it will not detect that it is a different one when you deploy it to another environment.
If you have deleted fields from it, the fields will still exist in the target environment. If you have created new ones, they will be created. If you have created fields with the same API name, the platform will try to update the field type, but if it is a change like, say, picklist to checkbox, then the deployment will likely fail.
I think the content of these questions might help you:
Best practice in this case is, in my opinion, to just add a
2 at the end of your field's API name:
MyCustomObject__c would change to
MyCustomObject2__c for example. The same for the fields. This should make it easier for you to migrate existing data, and definitely makes it easier to replace the fields in code. Since you won't be deleting the original field's data, you'll always be able to revert the changes in an easier way. And, of course, if everything goes smoothly after your new object/field is created and/or updated, it is also easier to just delete that old object/field.