I’d like to advance this topic from an informal request/discussion to a 
discussion of a concrete proposal.

To recap, it sounds like there is general agreement that commit history on 
develop should be linear (no merge commits), and that the biggest obstacle to 
this is that the PR merge button in GitHub creates a merge commit by default.

I propose the following changes:
1) Change GitHub settings to remove the ability to create a merge commit.  This 
will make Squash & Merge the default.

2) Change GitHub settings to require linear history on develop.  This prevents 
merge commits via command-line (not recommended, but wiki still has 
instructions for merging PRs this way).

3) Update the PR template to change the text "Is your initial contribution a 
single, squashed commit” to “Is your initial contribution squashed for ease of 
review (e.g. a single commit, or a ‘refactoring’ commit plus a ‘fix’ commit)"

For clarity, I am proposing no-change in the following areas:
i) Leave Rebase & Merge as an option for PRs that have been structured to 
benefit from it (this can make it easier in a bisect to see whether the 
refactoring or the “fix” broke something).
ii) Leave existing wording in the wiki as-is [stating that squashing is 
preferred].


Please comment via this email thread. 
-Owen



> On Dec 16, 2019, at 10:49 AM, Kirk Lund <kl...@apache.org> wrote:
> 
> I think it's already resolved Udo ;)
> 
> Here's the problem, if I fixup a dunit test by removing all uses of "this."
> and I rename the dunit test, then git doesn't remember that the file is a
> rename -- it forever afterwards interprets it as a new file that I created
> if I touch more than 50% of the lines (which "this." can easily do). If we
> squash two commits: the rename and the cleanup of that dunit test -- then
> we effectively lose the history of that file and it shows that I created a
> new file.
> 
> Also for the record, I've been working on Geode since the beginning and I
> was never made aware of this change in our process. I never voted on it.
> I'm not a big fan of changing various details in our process every single
> week. It's very easy to miss these discussions unless someone points it out
> to me.
> 
> On Mon, Dec 16, 2019 at 10:34 AM Udo Kohlmeyer <ukohlme...@pivotal.io>
> wrote:
> 
>> I'm not sure what this discussion is about... WE, as a community, have
>> agreed in common practices, in two place no less...
>> 
>> 1) Quoting our PR template
>> 
>> 
>>      For all changes:
>> 
>>  *
>> 
>>    Is there a JIRA ticket associated with this PR? Is it referenced in
>>    the commit message?
>> 
>>  *
>> 
>>    Has your PR been rebased against the latest commit within the target
>>    branch (typically|develop|)?
>> 
>>  *
>> 
>>    ***Is your initial contribution a single, squashed commit?*
>> 
>>  *
>> 
>>    Does|gradlew build|run cleanly?
>> 
>>  *
>> 
>>    Have you written or updated unit tests to verify your changes?
>> 
>>  *
>> 
>>    If adding new dependencies to the code, are these dependencies
>>    licensed in a way that is compatible for inclusion underASF 2.0
>>    <http://www.apache.org/legal/resolved.html#category-a>?
>> 
>> On our PR template we call out that the initial PR commit should be
>> squashed.
>> 
>> 2)https://cwiki.apache.org/confluence/display/GEODE/Code+contributions
>> <https://cwiki.apache.org/confluence/display/GEODE/Code+contributions>
>> -- See "Accepting a PR Using the Command Line" - Point #3.
>> 
>> 
>> @Kirk, if each of your commits "stands alone", I commend you on the
>> diligence, but in reality, they should either then be stand alone PR's
>> or just extra work created for yourself.
>> 
>> If we want to change the way we have agreed upon we submit/commit/merge
>> changes back into develop... Then this is another discussion thread,
>> until then, I think we should all remind ourselves on our agreed
>> contributions code of conduct.
>> 
>> --Udo
>> 
>> On 12/16/19 9:59 AM, Nabarun Nag wrote:
>>> Kirk, I believe that creating a Pull Request with multiple commits is ok.
>>> It's just in the end that when it's being pushed to develop branch, it
>>> needs to be squash merged. I believe that is what you have mentioned in
>> the
>>> first paragraph, and I am more than happy with that.
>>> If you can see in the first screenshot comparison that I had attached in
>>> the first email in this thread is what I want to avoid.
>>> 
>>> Thank you for your feedback.
>>> 
>>> Regards
>>> Naba
>>> 
>>> 
>>> On Mon, Dec 16, 2019 at 9:47 AM Kirk Lund <kl...@apache.org> wrote:
>>> 
>>>> Whenever I submit a PR with multiple commits that I intend to rebase to
>>>> develop, I always try to ensure that each commit stands alone as is
>>>> (compiles and passes tests). Separating file renames and refactoring
>> from
>>>> behavior changes into different commits seems very valuable to me, and
>> I've
>>>> had trouble getting people to review PRs without this separation (but it
>>>> could be squashed as it's merged to develop).
>>>> 
>>>> It sounds to me like the real problem is (a) some PRs have multiple
>> commits
>>>> that don't compile or don't pass tests, and (b) some PRs that should be
>>>> merged with squash are not (by accident most likely).
>>>> 
>>>> I can submit multiple PRs instead of one PR with multiple commits. So
>> I'll
>>>> change my response to -0 if that helps prevent commits to develop that
>>>> don't compile or pass tests. Without preventing rebase or merge commits
>>>> from github, I'm not sure how we can really enforce this or prevent (b)
>>>> above.
>>>> 
>>>> On Fri, Dec 13, 2019 at 3:38 PM Alexander Murmann <amurm...@pivotal.io>
>>>> wrote:
>>>> 
>>>>> I wonder if Kirk's and Naba's statements are necessarily at odds.
>>>>> 
>>>>> Make the change easy (warning: this may be hard), then make the easy
>>>>>> change."
>>>>>  -Kent Beck
>>>>> 
>>>>> Following Kent Beck's advise might reasonably split into two commits.
>> One
>>>>> refactor commit and a separate commit that introduces the actual
>> change.
>>>>> They should be individually revertible and might be easier understood
>> if
>>>>> split out. I vividly remember a change on our code base where someone
>>>> did a
>>>>> huge amount of refactoring that resulted than in one parameter changing
>>>> in
>>>>> order to get the desired functionality change. If that was in one
>> commit,
>>>>> it would be hard to see the actual change. If split out, it's beautiful
>>>> and
>>>>> crystal clear.
>>>>> 
>>>>> I am unsure how that would be reflected in terms of JIRA ticket
>>>> references.
>>>>> Usually we assume that if there is a commit with the ticket number, the
>>>>> issue is resolved. Maybe the key here is to create a separate
>> refactoring
>>>>> ticket.
>>>>> 
>>>>> Would that allow us to have our cake and eat it too?
>>>>> 
>>>>> On Fri, Dec 13, 2019 at 3:16 PM Nabarun Nag <n...@pivotal.io> wrote:
>>>>> 
>>>>>> It is to help with bisect operations when things start failing ...
>>>> helps
>>>>> us
>>>>>> it revert and build faster.
>>>>>> also with cherry picking features / fixes to previous versions .
>>>>>> And keeping the git history clean with no unnecessary “merge commits”.
>>>>>> 
>>>>>> Regards
>>>>>> Naba
>>>>>> 
>>>>>> 
>>>>>> On Fri, Dec 13, 2019 at 2:25 PM Kirk Lund <kl...@apache.org> wrote:
>>>>>> 
>>>>>>> -1 I really like to sometimes have more than 1 commit in a PR and
>>>> keep
>>>>>> them
>>>>>>> separate when they merge to develop
>>>>>>> 
>>>>>>> On Tue, Oct 22, 2019 at 5:12 PM Nabarun Nag <n...@pivotal.io> wrote:
>>>>>>> 
>>>>>>>> Hi Geode Committers,
>>>>>>>> 
>>>>>>>> A kind request for using squash commit instead of using merge.
>>>>>>>> This will really help us in our bisect operations when a
>>>>>>>> regression/flakiness in the product is introduced. We can automate
>>>>> and
>>>>>> go
>>>>>>>> through fewer commits faster, avoiding commits like "spotless fix"
>>>>> and
>>>>>>>> "re-trigger precheck-in" or other minor commits in the merged
>>>> branch.
>>>>>>>> Also, please use the commit format : (helps us to know who worked
>>>> on
>>>>>> it,
>>>>>>>> what is the history)
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> *                GEODE-xxxx: <brief intro >
>>>>>>>> * explanation line 1                                * explanation
>>>>> line
>>>>>> 2*
>>>>>>>> This is not a rule or anything, but a request to help out your
>>>> fellow
>>>>>>>> committers in quickly detecting a problem.
>>>>>>>> 
>>>>>>>> For inspiration, we can look into Apache Kafka / Spark where they
>>>>> have
>>>>>> a
>>>>>>>> complete linear graph for their main branch HEAD [see attachment]
>>>>>>>> 
>>>>>>>> Regards
>>>>>>>> Naba.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>> 

Reply via email to