On Mon, Apr 10, 2017 at 8:55 PM, Martin Panter <vadmium+py@gmail.com> wrote:
In this particular pull request, I think the submitter has rebased
their commit, and force-pushed it. These days, I notice Git Hub seems
to forget old commits pretty soon after you force-push the branch they
are on. I don't think you can "unsquash" them retrospectively; you
would need a copy of the old commits saved somewhere.

Other times people add revised commits on top of their old commits,
which would have been easier for me in this situation, but I suspect
that makes it harder for the person pushing the final change if they
have to squash it into a single commit. (I noticed the eventual commit
message is often messy, redundant, automatically generated, etc.)

We have some of this in the mypy project (though it's a much smaller project). The workflow that I like best (not all contributors use it) is

- When the contributor makes multiple local commits without pushing to the PR, I recommend using --amend unless they have several commits that actually are logically distinct and relevant to the reviewer. (--amend is especially important when fixing lint bugs or typos).

- Please don't use --amend across pushes to the PR

- It's OK to just pull+rebase and then use git push -f, but honestly pull+merge is fine too

- When responding to a review please NEVER use commit --amend, that's where reviewing becomes painful

- It's up to the reviewer who merges to rewrite the commit message: the reviewer usually has a much better sense for what info in the commit message will still be interesting a month or a year from now than the contributor. (Often just copying the original comment from the top of the PR is adequate.)

In mypy I recently disabled merge commits in mypy because some other committers sometimes accidentally used it, and the history becomes really ugly. (Maybe Brett already did this for cpython.)

I do agree that Rietveld's workflow is usually much more convenient, with the exception of what it does around merging or rebasing other diffs.

--
--Guido van Rossum (python.org/~guido)