We use Git for version control. I am working on a big project which might drastically change the current codebase. The general idea is to breakdown the project into smaller pieces, and commit them to Git locally. So it's easier to trace what's updated by small pieces.
However, the problem I have is some of the fundamental elements are not finalized yet, it's may change due to the integration with legacy system. One the fundamental element changes (e.g. the API interface, naming), all the dependancies need to be changed too. This makes me not able to commit any code. Since the checked-in commits might need to change again due to the fundamental element changes. So I am keeping everything uncommitted, and will commit them piece by piece once the fundamental element is really finalized.
I don't feel this is a good practice. I would like to commit the small pieces along when I'm done with modifying each piece. Not wait until the big project is almost completed, and commit at that time. How should I improve the development process?