Magit Is Amazing
Posted3 months agoActive3 months ago
heiwiper.comTechstoryHigh profile
calmpositive
Debate
60/100
MagitGitEmacs
Key topics
Magit
Git
Emacs
The post 'Magit Is Amazing' sparks a discussion about the benefits and drawbacks of using Magit, a Git interface for Emacs, with commenters sharing their experiences and alternatives like lazygit and Neogit.
Snapshot generated from the HN discussion
Discussion Activity
Very active discussionFirst comment
11m
Peak period
74
0-6h
Avg / period
19
Comment distribution95 data points
Loading chart...
Based on 95 loaded comments
Key moments
- 01Story posted
Oct 21, 2025 at 2:39 PM EDT
3 months ago
Step 01 - 02First comment
Oct 21, 2025 at 2:50 PM EDT
11m after posting
Step 02 - 03Peak activity
74 comments in 0-6h
Hottest window of the conversation
Step 03 - 04Latest activity
Oct 23, 2025 at 8:53 PM EDT
3 months ago
Step 04
Generating AI Summary...
Analyzing up to 500 comments to identify key contributors and discussion patterns
ID: 45659812Type: storyLast synced: 11/20/2025, 7:55:16 PM
Want the full context?
Jump to the original sources
Read the primary article or dive into the live Hacker News thread when you're ready.
So in my .profile I've got
``` alias gg="NEOGIT_SLAVE=1 nvim" ```
It's definitely not perfect but it's good enough to work for basic committing/rebasing flows and it's faster than booting up emacs for the same purpose.
Practical example - while browsing GitHub in my browser, with a keypress I can let Emacs grab the current thing and operate on it - clone the repo, read files, review PRs and Issues, etc. I can even do these things directly from my notes, or when someone shares a url with me. This isn't part of Magit, these are my own customizations, but it would be much more difficult to achieve without Magit.
FWIW, I agree. Jujutsu seems fine, but Magit is fine too. Maybe Magit is the Blub of version control, and Jujutsu would change my life for the better, but … I seem to be able to run in circles around my Git-CLI–using colleagues as it is.
2. `jj evolve` is excellent.
3. First-class conflicts. Even just deferring conflict resolution later is convenient.
Unrelated note: thank you for your jj tutorial!
- No staging needed, edit your commit directly in your working directory
- Rebasing is automatic, I regularly edit historic commits and the messages
- jj absorb will automatically split and merge hunks into related ancestry commits
- Defer conflict resolution; many conflicts are resolved later by splitting/squashing/moving commits/hunks further (possible only for first-class conflicts)
- No interactive rebase needed, since jj commands automatically rebase while editing historic commits, it feels like constantly living within an interactive rebase
- Easily refer to the same revision (change) across rebase commands by using a jj change_id, without scribbling down Git commit hashes that change across a rebase
- Easily undo (+redo) your last commands through the jj operation log without having to backup the entire git repo at each step
And jj-fzf (https://github.com/tim-janik/jj-fzf/) gives me every useful jj command with a single hotkey (e.g. Ctrl-P for push, Ctrl-N for a new commit with 1+ parents, Alt-B to edit bookmarks/tags, Alt-R to rebase, Alt-Z for undo, …) while browsing the log with commit+diff preview.
Here's the motivation for jj, described by its creator (this will be on the FAQ in the next release:
The project started as an experiment with the idea of representing the working copy by a regular commit. I (@martinvonz) considered how this feature would impact the Git CLI if it were added to Git. My conclusion was that it would effectively result in deprecating most existing Git commands and flags in favor of new commands and flags, especially considering I wanted to also support revsets. This seemed unlikely to be accepted by the Git project.
Fundamentally, jj is a different VCS, not just a UI layer on top of git. And so there's a lot of differences, but they sort of sound more generic than specifically "vs what magit gives you."
I don't have time to be more lengthy at this exact moment, but I'll be curious to hear what others say, and I can come back and say more later if you're curious.
Yeah, I know I should have given up Windows instead...
Lots of HN users like:
1. Emacs
2. Magit
3. Jujutsu
Just mention these three in a blog post and you'll hit the front page too!
Your move.
Also I'll have to say magit simply chose much better names than git. I never understood the `--onto` argument of `git rebase` because it's such a bad name. On the other hand magit calls it rebase subset and it's immediately clear; I now use this kind of rebase almost every day.
Basically, when you modify a change, jj will automatically rebase all descendants. It’s super useful!
These days, I find myself just using the smallest subset of commands possible to do my job, and it is enough. Just add, commit, push/pull and occasional stash or merge is like 99.9% of my daily usage. I don't even remember how to revert (was it checkout -- <filename> or reset <filename> or restore <filename>?) and I'm just fine with it.
I think that git is easy. Just learn the happy path, and maybe a way or two for restoring to a known good state without deleting the whole repo, it's enough.
I try not to torture anyone with it (VCS repair) who hasn’t already exhibited a knack for graph theory. I just tell them where the man traps are and to ask if they feel like they need to go there.
For work and all my older hobby projects still only use git and I used that for ages and know it quite well, but that does not mean I always feel like I need to use it instead of something simpler.
(It is also FUN to use some other tool and not just git year after year. Got to learn something new now and then.)
However I find there is a huge difference between me working solo on a repo or with one or two other people versus managing a complex project with 10+ developers and multiple SKUs in the same codebase (as an example).
That's when the "neurosurgery" aspects come in. Problems were frequently caused by junior devs making mistakes in their repo management that could be a headache to untangle (again, as an example).
https://github.com/jesseduffield/lazygit
I have no connection to this program, other than that I love it, and shill for it every time I get the chance.
That said, you'll pry that app from my cold, dead fingers.
Today I'd honestly suggest to skip learning about git altogether (besides the basics, like branching, staging etc) and just start using lazygit immediately.
I've seen people claim that having a clean git commit history is not worth the time, it takes too long to have it nice etc, opting to just stuff their refactor, renaming and new feature changes into one commit. With lazygit I spend a few extra minutes a day to make it nice and I've gotten compliments for it from others when they review my PRs, because it makes the review much easier.
https://github.com/magit/magit/issues/1811#issuecomment-9415...
But I find that there are cases in my workflow that I am more bothered by these things in magit than benefit I get from it.
I’ve been using Magit at work because it’s what everyone uses, and it just does useful shit I need to do, like help me revert specific chunks from an old commit, or migrate chunks to a different branch, or whatever. Stuff that I know how to do in Git, but I’m tired and it turns out Magit is just a lot faster and more interactive.
I have a long history of hating Git UIs but somehow Magit is the one exception. I’ve done a lot of surgery on Git repos in the past so I’m no slouch on the command-line, Magit just lets me do it all faster.
Usually the upvotes come from the casual users and the muttering from the heavy ones. In light of what I said, would you still recommend magit?
I share your horror for GUIs ineffectively hiding the version control reality; but then, despite being an emacs and casual magit user, I still mostly git add files one by one, having git diff the files one by one, and assembling the changed files into coherent groups.
There are definitely shortcuts I could take in some scenarios but walking the safe path even though it's a little longer is the sane response especially when you can type as fast as most of us and you've been using a bourne shell as long as I have.
Or if I'm being more charitable, it's about staying outside the yellow tape lines on the factory floor. No exceptions.
there's a faithful conversion as edamagit for vs-code.
It's way more casual than having to know Emacs.
If anything, Magit has helped me AVOID getting in a bad state, because it automatically shows me more information and context than what I get from the Git command line (despite all this fancy Git stuff I put in my prompt). When I’m committing in Magit, I see some weird hunk I didn’t mean to commit, and I can seamlessly edit it, because I’m already in the editor.
magit is a (somehow) thin layer on top of git output, and the brilliance comes from
The inference of flags and parameters is also helpful, yeah. I’m remembering times where I’ve done something in magit and it’s auto-populated some commit or branch name, and I’m like, “Yup, that’s the right one” which saves me fifteen seconds of looking up the right name. It makes sense that the command-line interface to Git would expect me to be more explicit.
The flip side is that I've never seen magit end up in an inconsistent state, which is probably for the same reason it's slow: it's not doing anything "clever," just directly showing you the information it got from git.
That sounds like a feature.
The heart of Continuous is: if it hurts, either do it until it doesn’t hurt or stop doing it altogether.
Sounds like option B to me.
Where do you work?
When I say “everyone” uses Magit, I want to clarify that I’m being hyperbolic.
Code review is kind of brutal.
A lot of time spent dealing with custom systems that should have been replaced with off-the-shelf, open-source alternatives like five or ten years ago.
The only pain point is that last time I checked (2020), it was painfully slow on Windows, but as I haven't touched Windows (other than doing a bit of tech support for my parents) since then, that is not a problem for me.
Like most of the things in Emacs - with variability that can suit [almost] every scenario - you can simply accept upstream or downstream changes with a keypress; use plain (line-by-line) diffing or 3way-merge diff UI; you can go through every hunk and precisely control things, while (if needed) rewriting the code; you can delegate the task to the external tooling;
What's great is that all that is happening in your editor - you can always bring another window next to your conflict resolution to compare with context in a different branch, revision or stash; you can jump from a diff pointing to a file to open it in Dired - directory browser and editor, where you can also get the log of changes pertaining that file only (or any marked files and dirs in the filetree). You can even ask LLM to help you at precise point, by just marking a hunk and sending a request - without context switching, without losing your focus.
Or, if you're into neovim, there's Neogit, which is inspired by magit. And if you're not, there's https://github.com/altsem/gitu
Yes there is - `alias vim='emacs -nw'` :)
Seriously though, do grant Lisp serious consideration - Emacs only truly comprehensible through the lens of Lisp. The experience may open your eyes to an amazing, wide world of interesting possibilities - Magit is only one of them. No serious programmer and computer scientist would ever outright dismiss Lisp. I'm not saying that you're categorically will fall in love with it, but you may like it. Then, the question "should I try Emacs" would have a completely different meaning.
You don't need to learn the JVM (beyond getting it installed) to play Minecraft and you don't need to learn Emacs to run Magit.
Nowadays I open Emacs exclusively for magit. I only know perhaps less than 5 magit commands, however, even use it for staging changes is such a huge leap and its chunk staging is indispensiable.
I settled for Doom emacs since it's in evil mode by default so I can still do both without running another process.
I prefer Spacemacs though.
'It' can do virtually anything you want to get done. I'm not sure what you expect here, the laundry list of possibilities?
However, PyCharm has a couple of git features that even lazygit doesn't have, which I find extremely useful:
Magit easily does that and more:
but then I'd have to use emacs ...
The interface builder has since been spun out as a separate library (and now included with stock Emacs!) called Transient, so there are several packages that leverage it. My favorite LLM interface (gpt.el) makes heavy use of transient menus. I've created my own transient menus for thinks like my PKM (Denote by Prot), my LSP client of choice (Eglot), and my citation manager (Citar).
I think git will be "good enough" version control for many years to come.
It's true that there's more to jj than just the stuff magit gives you, but also, people should use the tools they find useful. If you're happy with magit, it's totally reasonable to keep using magit.