Rebase is necessary so everyone develops based on the same version of upstream.
The example is contrived because it does not take into consideration that you will get merge commits for every developer updating his local mirror of the repository, causing the disorder to happen in blocks, worse than with rebase. With 3 or more developers committing to the same repo, the resulting history is impossible to read.
Bisect will let you go back one merge commit at a time on the branch you're bisecting (in this case, master), which will be filled with merge commits. You will be able to detect which merge contains the offending commit, but not the commit itself.
Then what? You revert the merge commit? You loose all the good commits along with the offending commit. Then, you need the original branch to make the fix, and then a new merge.
Who gets to commit into master, and who doesn't? If the answer is "nobody" then you will have master filled with merge commits.
If having the commits in chronological order was important, git would order them by timestamp instead of hash. But it doesn't. Because git tracks changes, not history (per se). Another good practice is to tag your deploys, or your versions so you can track the bulk of commits that were added since the last stable version, thus knowing where to look at.
Rebase is necessary so everyone develops based on the same version of upstream.
The example is contrived because it does not take into consideration that you will get merge commits for every developer updating his local mirror of the repository, causing the disorder to happen in blocks, worse than with rebase. With 3 or more developers committing to the same repo, the resulting history is impossible to read.
Bisect will let you go back one merge commit at a time on the branch you're bisecting (in this case, master), which will be filled with merge commits. You will be able to detect which merge contains the offending commit, but not the commit itself. Then what? You revert the merge commit? You loose all the good commits along with the offending commit. Then, you need the original branch to make the fix, and then a new merge.
Who gets to commit into master, and who doesn't? If the answer is "nobody" then you will have master filled with merge commits.
If having the commits in chronological order was important, git would order them by timestamp instead of hash. But it doesn't. Because git tracks changes, not history (per se). Another good practice is to tag your deploys, or your versions so you can track the bulk of commits that were added since the last stable version, thus knowing where to look at.