"Joakim Tjernlund" <joakim.tjernlund@xxxxxxxxxxxx> writes: > hmm, this is rather confusing. How I am to know what commands > deal with grafts? Appearently some plumbing does and some don't. An easy to remember rule is that almost everybody knows about grafts, but there are a few exceptions so that people (read: Porcelains) who _must_ know the true ancestry can find it out using them. Making use of grafts optional defeats the purpose of the grafts -- they ought to be mostly transparent and used without you asking. If you have a graft that makes commit X a parent of commit Y when it actually is not, and another that makes commit Z a parent of commit X when it actually is not, "git cat-file commit Y^" or "git rev-parse Y^" (they are at the level as low as any plumbing could go) would talk about X even though it is not really the parent, so in that sense even these lowest level plumbing commands "deal with" grafts. At the same time "cat-file" of the object X itself is the way to view the true ancestry information of the named object, and shows the "raw bits" without grafts, thus not making Z a parent of it. It is an escape hatch. Putting it another way, when referring to an object using ancestry chain traversal, you can always count on that the graft information is used. IOW, you always uses names with graft (so X == Y^ and Z == X^ == Y^^ in the above example) to refer to the object you are interested in. You use "cat-file" to find out the true ancestry of _that_ particular object you are interested in, or you use "show --parents" to find out the grafted ancestry. - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html