4 ms·
can you directly get the parent branch of a branch in jj? This is one thing that I constantly find myself wishing was in git but inevitably resign myself to kn
by nonethewiser 1y ago
can you directly get the parent branch of a branch in jj?
This is one thing that I constantly find myself wishing was in git but inevitably resign myself to knowing "thats just not how git works."
- steveklabnik 1y agoCould you spell out slightly more what you mean? I'm not 100% sure what "get" means.
- 1718627440 1y agoI think they mean what other branch some branch was originally branched off from.
- nonethewiser 1y agoYes. I could see confusion about the term "parent" but get? IDK what the confusion is there.
- steveklabnik 1y agoIt was just like, in what context? To print a log? To rebase something? "get" is not a command exactly. That's it. Some of it is also what a "branch" means to different people can mean different things: https://jvns.ca/blog/2023/11/23/branches-intuition-reality/ https://jvns.ca/blog/2023/11/23/branches-intuition-reality/ But yeah, as others have said, not really possible in a general way, sadly.
- nonethewiser 1y agoget as in find, retrieve, identify, etc. Im talking about a use-case not a git feature.
- steveklabnik 1y agoYeah now I got it! Just me being a bit confused, it's a me thing, not a you think :)
- lowboy 1y agoIf you're looking to model git branches as much as possible with jj bookmarks and assume that: - the working copy has a bookmark pointing to it - there's some ancestor with a bookmark - there's a single linear path between the two with no other bookmarks in between Here's an example that represents a branch containing 3 commits named "bookmark-05ff" branched off of "bookmark-6825". > jj log -r y:: -T builtin_log_redacted @ urplyywu user-482a 2025-10-23 13:24:52 bookmark-05ff a334e2e1 │ (empty) (redacted) ○ lxxtnlxw user-482a 2025-10-23 13:24:46 git_head() 7e32fa6b │ (empty) (redacted) ○ omktyuos user-482a 2025-10-23 13:24:13 7668b0bb │ (empty) (redacted) ○ ykzktoux user-7b7f 2025-10-23 13:23:47 bookmark-6825 98bfcbde │ (empty) (redacted) ~ In this case, the following log would get you the commit pointed to by "bookmark-6825": > jj log -r 'latest(ancestors(@) & bookmarks(), 2) ~ @' -T builtin_log_redacted ○ ykzktoux user-7b7f 2025-10-23 13:23:47 bookmark-6825 98bfcbde │ (empty) (redacted) ~ I'm using the builtin_log_redacted output template. Normally you'd have actual bookmark names, descriptions, user, etc. Also note this bakes in a lot of assumptions and is brittle. As many others have said, it’s not generalizable.
- baq 1y agoI don’t think you ever need to do this, jj tracks changes much better than git, assuming I understand your question. E.g. you can rebase a whole local change dag based on a commit from origin with a single jj rebase -b and it’ll move bookmarks (git branches) correctly.
- nonethewiser 1y agoThanks stack overflow
- mckn1ght 1y agoRight, “parent branch” implies a tree structure, but git is a DAG. You might have a specific workflow such that you can actually answer your question, but it won’t generally apply to all repos. Since a branch is really just a label for a specific commit, which may be at the end of a chain of successive parent commits, a branch isn’t really a first class structure, but a derived one. You can get the fork point of a branch, which is a common ancestor commit shared by another branch, but that fork point is a commit and may not have a branch label. That commit can have any number of other branches going off of it: how would you decide which one is the parent vs just another sibling? My assumption after looking at jj is that it is not as complicated as git yet. Give it time. It’s also not even as simple as git for many tasks, based on their own docs: https://jj-vcs.github.io/jj/latest/git-command-table/ https://jj-vcs.github.io/jj/latest/git-command-table/
- deleted 1y ago[deleted]
- KingMob 1y agoThat's even less how jj works, unfortunately for this use case, because jj doesn't require branches to be named. You could probably attach metadata to commits indicating the branch name at time of creation, but there's probably a lot of weird edge cases to handle.