Patch based Contribution
Here is how committing and merging will usually look for merging and pushing for tickets that follow the convention (if patch-based): Hypothetical CASSANDRA-12345 ticket is a cassandra-4.0 based bug fix that requires different code for cassandra-4.0, cassandra-4.1, and trunk. Contributor Jackie supplied a patch for the root branch (12345-4.0.patch), and patches for the remaining branches (12345-4.1.patch, 12345-5.0.patch, 12345-trunk.patch). On cassandra-4.0
git am -3 12345-4.0.patch(any problem b/c of CHANGES.txt not merging anymore, fix it in place)ant realclean && ant jar(rebuild to make sure code compiles)git commit --amend(Notice this will squash the 4.0 applied patch into the forward merge commit) On cassandra-4.1git merge cassandra-4.0 -s ours --loggit apply -3 12345-4.1.patch(any issue with CHANGES.txt : fix and git add CHANGES.txt)ant realclean && ant jar(rebuild to make sure code compiles)git commit --amend(Notice this will squash the 4.1 applied patch into the forward merge commit) On cassandra-5.0git merge cassandra-4.1 -s ours --loggit apply -3 12345-5.0.patch(any issue with CHANGES.txt : fix and git add CHANGES.txt)ant realclean && ant jar check(rebuild to make sure code compiles)git commit --amend(Notice this will squash the 4.1 applied patch into the forward merge commit) On trunkgit merge cassandra-5.0 -s ours --loggit apply -3 12345-trunk.patch(any issue with CHANGES.txt : fix and git add CHANGES.txt)ant realclean && ant jar check(rebuild to make sure code compiles)git commit --amend(Notice this will squash the trunk applied patch into the forward merge commit) On any branchgit push origin cassandra-4.0 cassandra-4.1 cassandra-5.0 trunk --atomic -n(dryrun check)git push origin cassandra-4.0 cassandra-4.1 cassandra-5.0 trunk --atomicGit branch based Contribution
Same scenario, but a branch-based contribution: On cassandra-4.0git cherry-pick <sha-of-4.0-commit>(any problem b/c of CHANGES.txt not merging anymore, fix it in place)ant realclean && ant jar(rebuild to make sure code compiles) On cassandra-4.1git merge cassandra-4.0 -s ours --loggit format-patch -1 <sha-of-4.1-commit>(alternative to format-patch and apply is cherry-pick -n)git apply -3 <sha-of-4.1-commit>.patch(any issue with CHANGES.txt : fix and git add CHANGES.txt)ant realclean && ant jar(rebuild to make sure code compiles)git commit --amend(Notice this will squash the 4.1 applied patch into the forward merge commit) On cassandra-5.0git merge cassandra-4.1 -s ours --loggit format-patch -1 <sha-of-5.0-commit>(alternative to format-patch and apply is cherry-pick -n)git apply -3 <sha-of-5.0-commit>.patch(any issue with CHANGES.txt : fix and git add CHANGES.txt)ant realclean && ant jar check(rebuild to make sure code compiles)git commit --amend(Notice this will squash the 5.0 applied patch into the forward merge commit) On trunkgit merge cassandra-5.0 -s ours --loggit format-patch -1 <sha-of-trunk-commit>(alternative to format-patch and apply is cherry-pick -n)git apply -3 <sha-of-trunk-commit>.patch(any issue with CHANGES.txt : fix and git add CHANGES.txt)ant realclean && ant jar check(rebuild to make sure code compiles)git commit --amend(Notice this will squash the trunk applied patch into the forward merge commit) On any branchgit push origin cassandra-4.0 cassandra-4.1 cassandra-5.0 trunk --atomic -n(dryrun check)git push origin cassandra-4.0 cassandra-4.1 cassandra-5.0 trunk --atomicContributions only for release branches
If the patch is for an older branch, and doesn’t impact later branches (such as trunk), we still need to merge up. On cassandra-4.0git cherry-pick <sha-of-4.0-commit>(any problem b/c of CHANGES.txt not merging anymore, fix it in place)ant realclean && ant jar(rebuild to make sure code compiles) On cassandra-4.1git merge cassandra-4.0 -s ours --logant realclean && ant jar(rebuild to make sure code compiles) On cassandra-5.0git merge cassandra-4.1 -s ours --logant realclean && ant jar check(rebuild to make sure code compiles) On trunkgit merge cassandra-4.1 -s ours --logant realclean && ant jar check(rebuild to make sure code compiles) On any branchgit push origin cassandra-4.0 cassandra-4.1 trunk --atomic -n(dryrun check)git push origin cassandra-4.0 cassandra-4.1 trunk --atomicTips
