If I understand correctly, you want to re-write the history of the master branch.
As a rule of thumb, it is generally a bad idea to rewrite the history of any branch that has been pushed to the remote (especially the master branch). It can lead to loosing other peoples contributions and break their local repo. More on that here.
If multiple persons have been contributing to your repo (or if you have a lot of commits) I’d suggest accepting the past and start structuring your repo with release/feature branches now and call it a day.
If you really want to have a clean commit history from the beginning, you need to rewrite the entire history without loosing any steps, here’s the thing I would to:
Copy your repo elsewhere on your file system for backup.
Using the Git Log, I would find every group of commits that would fit together in the same feature branch. I’d note the last commit hash and the related feature title.
For each of those groups, I would create a feature branch
- Begin on master
git checkout master
- Create and switch to the new feature branch
get checkout -b <name of the feature>
- Remove all commit since the last on
git reset --hard <the hash of the last commit of the feature>
Now that you have a bunch of nice feature branches, you need to merge them into master. But first, you need to erase the all history of commits on master. You can do that by resetting the branch to the first commit it the git log: git reset --hard $(git rev-list --max-parents=0 HEAD)
Finally, following the order in which the commits were added in the first place, you can do git merge <a feature branch>
for every branch you have created in step 2. If you haven’t forgotten any commit and respected the order in which they appeared, you should not have any conflicts.