I don't think it's been co-opted? Mirroring the emotions of another person you're actively observing doesn't give you insight into why they're feeling that way. It's just mirroring, but its an excellent starting point for learning. To have empathy, for people you're not actively observing, or for future states of people you are observing, you have to be able to model them first, and then mirror the emotions that the model predicts, which can then update the model. This loop is empathy, its both "experiencing other's emotions" and "the ability to understand and predict".
If you don't provide it a <tree-ish> it reads from the index (staged files). So you're right its not really pointed anywhere, since the index isn't a ref.
That's my overall point: the argument itself (with respect to the current state of the repo) is what determines the behavior. I don't think this is anywhere close to as intuitive as commands that only ever accept one "type" of argument (and erroring if it's different).
I stand corrected by this one scenario, but I’ve been using git for over a decade and never found that useful. Just don’t use checkout on a file path, there is no need.
I find this kind of advice to be a more scathing indictment of an interface than a critic could ever muster: asking users to forego available functionality so that some sense of order can be imposed.
That goes in the same bucket as rebase. Until you know what it does, you'll be fine avoiding it.
Since people are sharing their experiences and my recent one is relevant to edit, I'll go:
Working on a feature recently, I ended up making 3 changes ("commits") on top of each other and hopping between them via jj edit.
The first change wasn't feature specific, it was extending the base project in preparation.
The second change just added a doc describing all the changes needed for the feature.
The third change removed the doc as parts were implemented, bit by bit.
As I progressed on the third change & found stuff I'd missed at the start of this process, I jumped back to edit the first change (maybe I had a bug in that base project extension) and the second change (oh hey, I found something else that needed to be done for the feature).
It sounds crazy compared to a git workflow, but at the end of the process I have 3 changes, all tested & working. If I was doing this with git, I'd have to rebase/squash to get the final changes into a neat clear history.
I suggested that since you seemed really concerned about editing the commit that you just told it to edit. Use 'edit' all you want if your goal is to edit commits, otherwise 'new' does what it seems like you're expecting...
edit is useful and there are good reasons to use it, 'never use edit' is like 'never use goto' i.e. false - but if you're just starting out, jj new/jj squash is the way to go indeed.
(my particular favorite reasons to use jj edit are git-native tools which expect to work with uncommitted files e.g. autoformatters, linters, etc. which have been scripted in CI/dev workflows such that they cannot accept a list of files as params)
"Just don't accidentally do things wrong" is also the way to avoid null pointer errors, type mismatches in dynamically typed languages, UB in C/C++. It works, until it doesn't, and in practice that happens pretty quickly. Personally, I like things that have proper safety checks.
Except it's not an unrecoverable error. If you do it all it does is add that file to the working index. No commits are made and no harm is done. So no, I do not feel it's the same as a null pointer exception or type mismatch.
> If you do it all it does is add that file to the working index.
No, that's not at all what it's doing!
git init
touch foo.txt
git commit -m 'empty foo.txt'
echo something >> foo.txt
git diff --stat # Shows one line added to foo.txt
git checkout foo.xt
git diff --stat # empty output; no changes!
It removes changes that are not yet checked in. You can only get them back by going into the reflog (which is pretty much identical to the situation described with `jj edit` at the beginning of this thread; `jj op log` will let you get them back fine).
edit: Actually, I was wrong; the changes will NOT be in the reflog because they were never checked in. It's fully destructive; you've lost the changes and don't have any way of getting them back through git. This is strictly worse than anything possible with `jj edit`, and even when making this point I didn't realize how bad it was, and clearly neither did anyone defending it.
The fact that there have already been two instances of defending git's behavior without even understanding what it's doing with this command is exactly my point. It's not your fault; the command is unintuitive, and that's my entire point. How many times should it take for people to try to explain what's happening incorrectly before we accept this?
It's a useful thing to be able to do! It just fundamentally shouldn't be under one command. To its credit, git did add `switch` (with `-c` for creating a new branch and `-d` for specifying detached HEAD), but after two decades I can't imagine they'll ever get rid of checkout entirely because it was so fundamental for so long, and as long as its there, it's a loaded footgun with the safety off.
If you don't run checkout on file paths, how do you undo changes to specific files that you haven't committed yet? Like you've edited but not committed <foo>, <bar>, and <baz>. You realize your edits to <bar> are a mistake. I'd just run `git checkout <bar>` to revert those changes, what do you do?
It is also really useful when you realize you want <bar> to be the version from a commit two weeks ago. I guess you could always switch to the branch 2 weeks ago, copy the file to /tmp/, switch back, and copy the file into place, but `git checkout c23a99b -- <bar>` is so quick and easy. Or does this example not fall under the "dont run checkout on a path" since it is taking a treeish first before the path?
Container tabs, independent proxy config (chrome only respects system-wide proxy), vertical tabs, and functional adblockers are the four big features for me.
Weapons are designed with an opponent in mind, and guarded against the expected threat models from that opponent. Everything breaks down when the opponent does not what you want them to.
IPv4 pricing isn't a good enough reason? If all of my devices had nice ipv6 connectivity I could ditch the public ipv4 addresses, but I have to keep them so that my ipv4-only devices can still reach them.
Its purpose "if you run the software you should be able to inspect and modify that software, and to share those modifications with your peers" not explicitly resist copyright. Yes copyright is bad in that it often prevents one from doing that, but it is not the purpose of the GPL to dismantle copyright.
Reducing it to "well you can clone the proprietary software you're forced to use by LLM" is really missing the soul of the GPL.
Just because something is copyleft doesn't mean the person who gave you the binary you're using has to supply you with the code the used to build it. That's what the GPL does.
If nothing else the _perception_ of it is enough to have had a chilling effect, my own parents were concerned and affected by it enough to tell me where not to play outside so that I wouldn't be seen by randoms.
yeah, I would rather it did that. You run Claude in a sandbox that restricts visibility to only the files it should know about in the first place. Currently I use a mix of bwrap and syd for filtering.
To wit, if you get to vote for the HOA board but not for the government that can override every decision the HOA makes, are you meaningfully enfranchised?
They're arguing that due to the failure/stalling of the two-state solution, the PA is effectively not a national government. It administers local services, like policing, courts, infrastructure. But it doesn't control borders, tarrifs and duties, or airspace. The Israeli military operates a parallel legal system that can detain and prosecute them, all under a legal framework that they have no vote or say in. I think its fair to call this a kind of disenfranchisement?
I understand where you're coming from, but this is a flawed analogy.
The legal framework for the Palestinian Authority's existence is a bilateral treaty. Israel did not unilaterally create this flawed administrative entity: it was jointly created with the PLO, as an interim step towards a fully sovereign Palestinian state. The negotiations that followed were also bilateral. These negotiations failed, leaving both sides with an incomplete interim solution. As a result Palestinians are neither citizens of Israel, nor of a wholly sovereign state. They are stateless, that is undeniable. But the reason they are stateless is not that they "have no vote or say". They had a say at the negotiation table in Oslo. They also had a say in Camp David in 2000, when Yasser Arafat walked away from a deal that would have given him a state with its capital in Jerusalem, and started the second intifada instead. They had a say in 2005 when they elected Abbas over reformist alternatives. They had a say in 2006 when they elected Hamas in Gaza. And they have a say now, as Abbas maintains the "pay to slay" program that rewards attacks against Israeli citizens with welfare payments to the attacker's families. There's a reason Israel insisted on overriding security control in the interim state. They couldn't trust the PLO, the very group that killed countless Israeli civilians in shootings, stabbings and bombings, to become the sole guardians of Israeli safety overnight. In Oslo the Palestinian Authority accepted the responsibility to prevent terrorist attacks against Israel. They are free to deliver on that commitment anytime.
My issue with your framing ("the PA is like an HOA"), the parent comment's framing ("Israel solely controls the fate of Palestinians"), and the original comment that started this whole debate ("Palestinians are a disenfranchised part of Israeli population"), is that it strips Palestinians of agency and shared responsibility. It's annoying when you do it. But it's tragic when Palestinians do it to themselves. By perpetuating this myth that they are helpless, blameless victims of external forces, they are making internal reform impossible ("what is there to reform? All our problems are Israel's fault") and any resolution to the conflict impossible ("we are the rebels, Israel is the empire. The only resolution is to blow up the death star").
To tie this back to the original topic of disenfranchisement: even in the flawed interim state created in Oslo, Palestinians have had the opportunity to vote. Not in a state, but in an institution created specifically to chart a path to a state. They elected a president, who then proceeded to cancel presidential elections (the last one was in 2005). They elected a legislative body, who started a civil war and established one of the most violent theocracies in the world. None of this was Israel's doing. To the extent that Palestinians are disenfranchised - denied the opportunity to vote - it is by their own leaders. If anything, it makes me glad Palestine isn't a full-blown state: with leaders like that, the more limits to their power, the better.
reply