Junio C Hamano <gitster@xxxxxxxxx> writes: > "Linus Arver via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > >> For these reasons, remove the guidance _without_ preserving the meaning >> of the underlying principle, and instead add an overview of the four >> named branches. > > Meaning that this rewrites the guidance Yes. > and changes the meaning of the underlying principle? Hmm, no. I think I should have written in my commit message instead: --8<---------------cut here---------------start------------->8--- For these reasons, remove the guidance while still preserving the meaning of the underlying principle by adding an overview of the four named branches. --8<---------------cut here---------------end--------------->8--- However, I now think deleting the "base your work on the oldest branch that your change is relevant to" text was unnecessarily harsh. I think I can reword it to make it sound less contrary to the accompanying bullet points. Will update in v2. >> -In general, always base your work on the oldest branch that your >> -change is relevant to. >> +The following branches are the typical starting points for new work: >> + >> +* maint >> +* master >> +* next >> +* seen >> + >> +These branches are explained in detail in linkgit:gitworkflows[7]. >> +Choose the appropriate branch depending on the following scenarios: > > Please never suggest to build anything on 'next' or 'seen'. They > are inappropriate to base your work on, if your topic wants to have > a realistic chance to graduate to 'master'. I only included "next" and "seen" here just below "maint" and "master" because they were included as OK-places to start new work (albeit in exceptional cases) in one of the bullet points: --8<---------------cut here---------------start------------->8--- * In the exceptional case that a new feature depends on several topics not in `master`, start working on `next` or `seen` privately and send out patches only for discussion. Once your new feature starts to stabilize, you would have to rebase it (see the "depends on other topics" above). --8<---------------cut here---------------end--------------->8--- > If you are making tree-wide changes, while somebody else is also > making another tree-wide changes, your topic may have severe overlap > with the other person's topic. In which case, you may be tempted to > build on 'next' that has the other person's topic, but doing so would > mean you'll not just depend on the other topic, but with all the > other topics that are already in 'next'. Good point. I will include this tip in v2 (seems like something that would be especially helpful for newer contributors). > That would make the basic choices simpler. > > * If you are fixing bugs in the released version, build on 'maint' > (which may mean you have to fix things without using new API > features on the cutting edge that recently appeared in 'master' > but were not available in the released version). > > * If you are adding new features, build on 'master'. > > Under exceptional circumstances that you need to depend on a > selected few topics that are already in 'next' but not in 'master', > you may want to fork your base-branch from 'master', merge these > selected few topics to it, and call that your base-branch (which > nobody else has). And then you build on top of it. When sending > patches out, because your synthetic base-branch is something only > you have, you'd need to communicate how you created it in your cover > letter to allow others to recreate it. I strongly agree that this is simpler. One thing I would change is to use a phrase like "start your work" instead of the word "build" because the latter on quick glance could be misinterpreted as literally building (compiling/packaging) the project. Will incorporate in v2 (thank you for the suggestion; will credit you in a "Helped-by: ..." trailer).