Rebasing in Magit

(entropicthoughts.com)

136 points | by ibobev 5 hours ago ago

97 comments

  • mschulze 5 hours ago ago

    I use magit daily for over 8 years now. Over that time I have showed it to many other peers, out of excitement for a tool that made me more productive and helped me learn - but I never could convince even one to use it. Maybe it's my persuasion skills, maybe tool usage is too personal - I don't know, but it makes me kind of sad. The UX of magit is just out of this world.

    Especially for rebasing, subset rebases (using --onto, see https://git-scm.com/book/en/v2/Git-Branching-Rebasing#_more_...) are a breeze with Magit. I can't remember the order of branches to use on the CLI, in Magit it's just "r s" basically. It's really magic.

    • lambda 4 hours ago ago

      Magit is absolutely the best Git GUI ever.

      Unfortunately, for most people the fact that it's part of Emacs is a blocker.

      And because most people use worse Git tools, they tend to use workflows that are easier with more cumbersome tools; generally just committing all kinds of junk commits to a branch, and using the "squash and merge" feature of GitHub or GitLab to clean everything in a PR/MR up into a single commit.

      So yeah, it's sad that people don't use Git to its full potential because almost no other Git interface works as well, and most people aren't going to learn Emacs just for a Git UI.

      • moritzwarhier 8 minutes ago ago

        Personally, I'm not a Git magician, but I prefer the Git CLI for most operations.

        Only exception is resolving conflicts.

        The most important point for every gut IDE integration to me is that it cleanly maps to the file system and CLI state.

      • w4rh4wk5 4 hours ago ago

        I've looked at Magit and indeed Emacs is a blocker as it's not something I'd like to pick up and maintain. I am using Fork as my primary Git GUI and am pretty happy with it. Lazygit and tig cover the few use-cases which Fork does not cover.

        • zelphirkalt 2 hours ago ago

          I am not someone to recommend VSCode, but if you are already using it, you could check out edamagit. I think in the Vim world there is also some equivalent.

      • saila 2 hours ago ago

        Good tools can improve your workflow for sure, but it's easy enough to keep a clean history with a handful of git commands. There are two main reasons people don't do so: 1. they don't know the commands yet or 2. they just don't care (and are in an environment where there's no incentive to care).

        The kind of person who would try a tool like Magit and use it to discover git would have found a different route if Magit didn't exist. The type of person who doesn't care isn't going to learn something just because a tool is available.

      • znpy 2 hours ago ago

        > Unfortunately, for most people the fact that it's part of Emacs is a blocker.

        OT but i've learned the hard way not to push people into emacs.

        a few years ago i made the very stupid mistake of pushing some colleague to trying/learning emacs and then i found myself having to explain the same person everything as well as fix his elisp code from his ~/.emacs .

        Reality is, i didn't want to have that role and that colleague wasn't interested in gnu emacs in the first place.

        That was a very stupid mistake on my side.

        Nowadays i just say things like "yeah it's magit, an emacs plugin" or "ah yeah, it's nice because you spend some time learning it and then you can bring it over from company to company, no licenses involved or other annoyances".

        Some people are intrigued, most other absolutely aren't... And it's fine.

        • kqr an hour ago ago

          Surely the mistake here is conflating "learning Magit" with "learning Emacs"? I can run Java applications while knowing nearly nothing about the JVM. The same is true for applications based on Emacs.

          • steve1977 an hour ago ago

            One does not simply use Emacs.

      • imiric 2 hours ago ago

        Peculiarly, having used Emacs for a decade as my main editor, and Git for much more than that, I never could get used to Magit.

        Maybe it's due to muscle memory from my CLI Git setup (nothing special, just some aliases, scmpuff, delta, etc.), or Magit forcing you into its own quirky UI, but it never clicked for me. For 99% of things I use Git for, I don't have any issues with my workflow, nor wish to improve it. For the other (very) rare occasions, I can always ask an LLM to help me figure out the right command.

        This is also why I don't see any value in Jujutsu either, or any of the GUI/TUI wrappers. The Git CLI porcelain with some minor customizations just hasn't been a problem I need solving.

      • publicdebates 2 hours ago ago
      • troupo 4 hours ago ago

        The best gut GUI is GitUp: https://gitup.co/

        Magit is not even close to be on the same level.

        Any insane operation you want at your fingertips.

        • jbstack 3 hours ago ago

          It's Mac-only. That's a pretty serious limitation for a modern Git tool.

        • MainlyMortal 2 hours ago ago

          I upvoted you because you were unfairly downvoted. I don't even use a Mac any more after 20 years of exclusively using them but it's actually hilarious how bad magit is compared to this. It's all well and good making the most of limitations that are self imposed but people need to remember to look outside their own bubble.

          • znpy 2 hours ago ago

            > I don't even use a Mac any more after 20 years

            So the software is mac-only, you haven't used a mac in over 20 years so you haven't used this software and yet... you claim it's better than magit?

            i mean, it's very dishonest at best.

            • BeetleB an hour ago ago

              > you haven't used a mac in over 20 years

              Not what he said. You misparsed.

            • troupo 2 hours ago ago

              The claim was that its GUI is better than Magit's, following this claim: "Magit is absolutely the best Git GUI ever."

              • lambda an hour ago ago

                It may be prettier looking. I've seen many Git GUIs that are prettier than Magit.

                But none of them that I've tried have ever come close to the workflow.

                I can stage and unstage individual hunks, do complex interactive rebases, squash commits, break apart commits, etc. much faster in Magit than I can in other Git GUIs.

                Maybe you're hung up on the "G" part; perhaps I should have just said "UI" rather than "GUI".

                So no, I haven't tried that one because it's Mac only, but I'm not really seeing from the screen recordings the kind of workflow that I find so powerful in Magit.

    • masklinn 4 hours ago ago

      I personally don’t care for rebasing in magit (I actually find it confusing when hitting conflicts).

      My primary reason for using it is reviewing and staging commits. The non-linear staging with line granularity (which also lets you revert changes at the same time) is so, so very good when you care about crafting commits.

      • mschulze 4 hours ago ago

        Right - actually, for conflicts I switch to IntelliJ.

    • Perz1val 5 minutes ago ago

      I'll never touch any git wrapper, because they've lied to me before and I can use git already. Everything that was there to be sped up has already been made into zsh functions.

    • sureglymop an hour ago ago

      It looks really cool but the thing is, having learned git just as a cli tool, I don't think any UI would convert me from that workflow.

      The exception is maybe diffing, where I just use meld as the difftool.

    • taude 4 hours ago ago

      I used to use Magit, but once I discovered LazyGit four years ago, I never looked back. No Emacs bloat and a great TUI-based UX with quick single key press actions.

    • jwr 3 hours ago ago

      > I never could convince even one to use it

      Most people think it's "just another interface on top of git" — without several in-depth examples it's difficult to realize that it actually allows you to complete really complex tasks quickly. I've seen this superficial take many times.

    • zelphirkalt 2 hours ago ago

      Same experience here. Showed it to coworkers, but none was interested in making their tooling work well. Even looking for a VSCode equivalent for them (edamagit) no one was even willing to try. Yet people complained about many branches in repos, which didn't impact me at all, but for their GUI git clients apparently were a problem, and so we switched to deleting branches upon merge, discarding some git history along with that (when something was merged).

    • jayd16 4 hours ago ago

      What makes something easier in magit than, for example, SmartGit?

      • mschulze 4 hours ago ago

        I haven't used SmartGit, so I can't really compare.

        I would single out the following for Magit:

        1. Single key strokes for actions and toggles 2. Discoverability through "slide-ins" (TFA also explains this)

        For 2, this means I press "c" for commit, this opens a popup showing me the next keypresses and what they do. So I can build up muscle memory for commands I know that are fast due to 1, and I can discover options that might help me due to 2.

        If I don't know what to do at all, there's Ctrl+c, Ctrl+c to discover "entry-points" for Magit shortcuts.

        • zelphirkalt 2 hours ago ago

          I would also highlight that in Emacs magit one can always drop back to command line by pressing "!", which I do, when I don't know how to do something in Magit. Like "git submodule update --init --recursive".

    • erksa 4 hours ago ago

      Same, emacs being the barrier for most.

  • jonpalmisc 4 hours ago ago

    Tangential, but I really wish there would be a performance renaissance with Emacs.

    Native-comp was a good step forward, but Emacs is still so much slower than Neovim, even in the case of launching and immediately quitting, with no config:

        $ time emacs -Q -e kill-emacs
        /Applications/Emacs.app/Contents/MacOS/Emacs -nw -Q -e kill-emacs  0.18s user 0.03s system 98% cpu 0.213 total
        
        $ time nvim -es --cmd 'vim.cmd("q")'
        nvim -es --cmd 'vim.cmd("q")'  0.02s user 0.01s system 82% cpu 0.034 total
    
    Even with a very minimal set of packages, text insertion, etc. is slower, and opening Magit (when it hasn't been loaded yet) takes about a second due to slow package loading.

    Emacs is my favorite editor, full stop.

    But every time I open Neovim or Sublime for quick tasks, it's always painfully apparent how much faster they are when I CMD+Tab back to Emacs.

    • Ferret7446 11 minutes ago ago

      Emacs is functionally a shell not an editor. Starting Emacs for each file is akin to starting and stopping Wayland for every web page you open.

      So the miniscule increase in start time is a non issue

    • zelphirkalt 2 hours ago ago

      Emacs' hard to solve issue is its use of global mutable state all across the board, which makes concurrency and parallelism very hard to add properly. It will take a lot of effort to slowly carefully reduce the error/bug surface and add proper parallelism constructs, that are easy to use for any package author.

    • spudlyo 3 hours ago ago

      On my M1 Mac Pro I get 0.13s wall, so not much faster than your Mac. On my i9-9900K Linux box I get 0.04s. I would think my M1 single core performance would be on par, if not faster. Perhaps it has something to do with macOS and gatekeeper, as I notice I'm not getting as high of a CPU utilization.

          $ gtime /opt/homebrew/bin/emacs --batch --eval '(princ (format "%s\n" emacs-version))'
          30.2
          0.07user 0.03system 0:00.13elapsed 78%CPU (0avgtext+0avgdata 46064maxresident)k
      
          $ /usr/bin/time ~/bin/emacs --batch -eval '(princ (format "%s\n" emacs-version))'
          30.2
          0.02user 0.01system 0:00.04elapsed 95%CPU (0avgtext+0avgdata 57728maxresident)k
      • frantathefranta 2 hours ago ago

        GUI Emacs on a 12 year old processor (i5-4590) feels faster than on a M4 Pro Macbook. I think it's just something to do with the window manager on each of the systems (my experience is mostly with Wayland KDE) rather than the speed of the CPU.

        • spudlyo 2 hours ago ago

          I also run GUI Emacs on both Linux and macOS. I build it on Linux with --with-x-toolkit=lucid and for $REASONS I'm still on X11. I run it in a full-screen frame on its own monitor, and it does indeed feel faster.

    • ishouldbework 4 hours ago ago

      While faster Emacs would always be nice, I think the idea is you just keep it running. Hence emacsclient program. So startup time is not such a big deal.

      • jonpalmisc 4 hours ago ago

        Personally, I don't buy into this argument. I think having a globally shared buffer state, etc. is an antifeature. Plus, there's no reason that starting a TUI program should be that slow.

        Either way, this only addresses startup time too. The rest of the issues: text insertion lag, `project-find-file` being slow in large repos, etc. all remain.

        • finaard an hour ago ago

          The slowness on startup in my emacs mainly comes from my customizations - over the last almost 3 decades I've accumulated roughly 30k loc of custom lisp, plus a lot of 3rd party stuff.

          But I typically start emacs at boot, and then it runs until I reboot. I usually have one GUI frame, and one tui frame running in tmux so I can easily attach to my emacs session from a different computer. I have an emacsclient wrapper that opens stuff from the command line in my running emacs (and also mail wrappers, so clicking on a mail link in a browser opens a mail compositor in emacs).

          I'm using eyebrowse with a bunch of own convenience features for workspaces in emacs - stuff like "when I switch to a buffer it'll switch to the workspace wher e that buffer is open unless I tell it I want it here". Combine that with some custom SSH entry points and especially on the notebook where I only have one screen it's way more comfortable to use than the OS window management for a terminal/ssh session messy like me.

        • chriswarbo 3 hours ago ago

          > I think having a globally shared buffer state, etc. is an antifeature.

          As someone who mostly lives in Emacs, I like it. If I'm away from a machine, I can SSH into it and carry on with whatever I was in the middle of.

          It's also nice to set emacsclient as EDITOR, so that e.g. running `git commit` will open up a buffer in the existing Emacs session. This is especially useful since I use shell-mode, and it would be confusing/weird to have new Emacs instances popping up when I'm already in an editor! (They open in a "window" (i.e. pane) in the existing "frame" (i.e. window) instead)

        • ragall 3 hours ago ago

          > Plus, there's no reason that starting a TUI program should be that slow.

          There's no reason why it shouldn't. You seem to think that the interface obliges a program into a certain performance pattern. No such obligation exists. And Emacs isn't a TUI program, it only happens to have a terminal interface among many others.

          • jonpalmisc 3 hours ago ago

            > You seem to think that the interface obliges a program into a certain performance pattern.

            I think all software (or at least, any text editor) regardless of interface type should launch instantly. But it's more unjustifiable with TUI programs.

            • ragall 11 minutes ago ago

              Nah. Here's a counter example: the TUIs that IBM wrote for many old store chains like Home Depot. They're at least an order of magnitude faster to operate for cashiers compared to web UIs but they're somewhat slow to start due to the caching and self-checks they do. This obsession with quick boot is more of a personal preference you have than a necessity.

        • dietr1ch 3 hours ago ago

          > having a globally shared buffer state, etc. is an anti-feature

          Yeah, it feels a bit weird to not have some isolation.

          Spacemacs offers layouts[^1] that give you some buffer-isolation. Each window has a "layout", and layouts have sets of buffers. It works well, but you can run into extra prompts if you open the same buffer from two layouts and try to kill it from one of them (kill the buffer (for all layouts)? just remove from this layout? In my mind the latter should just be the default).

          [^1]: https://www.spacemacs.org/doc/DOCUMENTATION.html#layouts-and...

        • precompute 3 hours ago ago

          Emacs has globally shared buffer state amongst the frames that share the same "base frame" (no idea what this is called) or the same socket (could be wrong here).

          Anyway, you can start N emacs instances and they can all have individual buffer states.

          Emacs is not primarily a TUI program (although it does have a TUI with the -nw). The TUI version of emacs lacks visual customizability and introduces unnecessary overhead (terminal!). Use the GUI.

          Text insertion lag is something I haven't experienced since 2019. Config issue?

          project-find-file might be slow because of low gc-cons-threshold. I know consult gets around this by temporarily raising the threshold. These days, you can use the feature/igc branch to make these operations faster (although they are pretty fast anyway).

          If you think emacs lacks <fundamental feature X>, think again!

          • MereInterest 5 minutes ago ago

            > Emacs is not primarily a TUI program (although it does have a TUI with the -nw). The TUI version of emacs lacks visual customizability and introduces unnecessary overhead (terminal!). Use the GUI.

            Can you elaborate on this? I tend to use emacs exclusively in the terminal, since I'm often using them on remote workstations. For remote workstations, I can (a) open files using TRAMP, (b) open a remote GUI with X11 forwarding over SSH, or (c) open a remote TUI. TRAMP doesn't always play nicely with LSP servers, and remote TUIs are much, much more responsive than X11 forwarding.

            Locally, the performance of emacs depends far more on the packages I load than on the GUI vs TUI, so I'm interested in hearing what overhead there would be.

        • smitty1e 3 hours ago ago

          > I think having a globally shared buffer state, etc. is an antifeature.

          Maybe, but I'd like to hear why you think this is such an antifeature for a single-threaded application.

          Given the extra resources available these days, for example, why not just bring up a stand-alone ERC instance for chatting, if shared state is a concern?

    • dietr1ch 3 hours ago ago

      > Emacs is still so much slower than Neovim, even in the case of launching and immediately quitting

      I agree, but there's ways around it. On my machine the Emacs daemon is ready before I even log-in (lingering [^0]).

      I think I only restart the daemon when I update emacs and its packages, and yeah, Emacs and Spacemacs are slow, but do not slow me down.

      [^0]: https://wiki.archlinux.org/title/Systemd/User#Automatic_star...

    • chriswarbo 3 hours ago ago

      Emacs can certainly be sluggish, but I'm not sure how much that's e.g. inherent to ELisp, or due to synchronous/single-threaded code, or choosing slow algorithms for certain tasks, etc.

      For me, the best performance improvement has been handling long lines; e.g. Emacs used to become unusable if it was given a line of around 1MB. Since I run lots of shell-mode buffers, that would happen frustratingly-often. My workaround was to make my default shell a script that pipes `bash` through a pared-down, zero-allocation copy of GNU `fold`, to force a newline after hitting a certain length (crossing a lower threshold would break at the next whitespace; hitting an upper threshold would force a break immediately). That piping caused Bash to think it wasn't interactive, which required another work-around using Expect.

      Thankfully the last few versions of Emacs have fixed long-line handling enough for me to get rid of my awful Rube-Goldberg shell!

    • Joe_Cool 3 hours ago ago

      What hardware are you on?

      On my old Ryzen 3600X running Arch it's a lot faster. Does the UI eat so much performance on OSX?

        $ time emacs -Q -e kill-emacs
        real    0m0.076s
        user    0m0.058s
        sys     0m0.018s
      
        $ time nvim -es --cmd 'vim.cmd("q")'
        real    0m0.028s
        user    0m0.005s
        sys     0m0.003s
      
      vim still is a lot faster though.
      • znpy 2 hours ago ago

        > On my old Ryzen 3600X running Arch

        > vim still is a lot faster though.

        you might want to make sure you're comparing apples to apples though. the "emacs" command most likely is going to load the GUI emacs so a lot of gui libraries (if you're running a recent emacs then even GTK libraries) whereas the nvim command isn't going to load gui libraries at all.

        maybe try with a non-gui version of emacs (or maybe calling emacs -nw)

        • Joe_Cool an hour ago ago

          no, this is the TUI version. X11 emacs with all the composited effects needs about 200-250ms to open (about the duration of the animation for opening and closing it). That's more like OP's timings.

          • codygman an hour ago ago

            No, you need to use -nw with emacs to make it apples to apples. Then it's emacs 0m0.095s vs nvim 0m0.057s:

                $ time nvim -es --cmd 'vim.cmd("q")'
            
                real 0m0.057s
                user 0m0.016s
                sys 0m0.017s
            
                $ time emacs -Q -e kill-emacs
            
                real 0m0.230s
                user 0m0.165s
                sys 0m0.064s
            
                $ time emacs -nw -Q -e kill-emacs
            
                real 0m0.095s
                user 0m0.057s
                 sys 0m0.017s
            • Joe_Cool an hour ago ago

              Shouldn't matter when I am not on GUI seat. In my SSH session with X11 forwarding there is no DISPLAY emacs could use.

              Tried it anyways, looks the same:

                $ time emacs -nw -Q -e kill-emacs
                real    0m0.075s
                user    0m0.062s
                sys     0m0.013s
    • ahoka 4 hours ago ago

      /usr/bin/time emacs -Q -e kill-emacs 0.03 real 0.02 user 0.00 sys

      Altough I'm not using Emacs.app.

      • jonpalmisc 4 hours ago ago

        Not using Emacs.app because you aren't on macOS, or using some other build/setup? If the latter, I'm curious.

    • 8s2ngy 3 hours ago ago

      I share your wish. Emacs, as wonderful as it is, has accumulated a lot of cruft over the decades and would benefit immensely from a rewrite. A "Neo-Emacs" could be multithreaded from the ground up and drop support for archaic platforms. The rewrite could even be in Rust to attract younger developers.

      • umanwizard 3 hours ago ago

        There would be no point to writing emacs in a language that can’t be developed interactively in a repl. Emacs being written in lisp is an essential quality.

        • BigTTYGothGF 3 hours ago ago

          > Emacs being written in lisp is an essential quality

          Not for the parts of it I use.

      • precompute 3 hours ago ago

        >a lot of cruft

        Like what? Emacs is written in C and there are ports of it out there (all half-abandoned). Emacs, the way it exists, works very well.

        • umanwizard 3 hours ago ago

          The vast majority of emacs is written in lisp, not C.

    • BigTTYGothGF 3 hours ago ago

      I'm not sure I'm capable of noticing or caring about the difference between 0.18 and 0.02 seconds for something that doesn't happen on a rapid cadence.

    • precompute 3 hours ago ago

      Startup time does not matter, use the daemon. Opening a new frame is ~instantaneous.

      I practically live in Emacs and it's not slow at all. It's very zippy, and my setup isn't the lightest!

      There's a new branch (feature/igc) with incremental garbage collection (via MPS) that makes routine actions faster. I've been using it and it has been incredibly stable and has completely eliminated stutters (which used to happen very infrequently, but were present). Also, to me, it seems like it improves latency. The cursor feels more responsive.

  • chriswarbo 3 hours ago ago

    I've been using magit for years, and it's the reason I avoided giving the jujutsu VCS a try: the `jj` workflow/UI is supposedly much nicer than the `git` workflow/UI; but since I use magit more than bare `git` commands, that wasn't enough to sell me.

    I finally gave it a try when I came across the majutsu package, which is a magit-like interface for jujutsu. I recommend it for Emacs/magit users wanting to try `jj`!

    • BeetleB an hour ago ago

      Is there anything prominently missing in majutsu?

      • chriswarbo 33 minutes ago ago

        I'm still learning jj, so I'm not sure about jj things that majutsu might be missing, or what git/magit things seem "missing" but are just done differently in jj.

        A couple of things I tend to notice:

        - In magit, I can run a raw git shell commands by pressing `:`; majutsu doesn't seem to have that, so I use Emacs ordinary `M-!`

        - The default view in majutsu (log) isn't as slick as magit's. With magit, I'll routinely open it up to look at the repo status, browse through the diffs (expanding/collapsing), staging/unstaging, etc. With majutsu, most of that requires first opening up the log, then opening up the diff of a commit.

        - Staging/unstaging in magit is quite nice. The analogous workflow in jj seems to be splitting/squashing, but that feels clunkier in majutsu.

        I've not opened bugs or PRs for these things, since it's mostly vibes and I don't have actual solutions to offer ;-)

        EDIT: Oh, I also remembered that `jj` ignores $PAGER and uses its own built-in paging by default. That tries to act like `less`, and doesn't work well in Emacs. It can't use env vars either, unless we set its pager to something like `sh -c "$PAGER"` (see https://docs.jj-vcs.dev/latest/config/#pager ). Since my $PAGER is always `cat`, I've just set that as jj's pager directly too.

    • tcoff91 2 hours ago ago

      I really love the jjui TUI. For non-emacs users who want a great TUI for jj definitely check it out.

      • baq an hour ago ago

        one thing I'm missing in jjui which jj cmdline does natively is rebase onto multiple heads - using this for quickly testing my branch on some other pr and latest main. other than that agreed, helps a lot with tedious noting down of change id prefixes.

        • Zambyte an hour ago ago

          This is something I've never done before. Are you just repeating -o, creating a merge commit?

          If that's the case, it also seems like you can do jj duplicate and repeat -o if you just want to create a branch to temporarily test against another branch and main.

  • jwr 3 hours ago ago

    One of my favorite magit tricks: cF (commit with instant fixup).

    This lets you add a single-line change to a commit way back somewhere in the log.

  • tambourine_man 5 hours ago ago

    Magit is one of the few things that makes me, as a Vim user, envy Emacs. And org-mode, since I'm being honest.

    • kqr 4 hours ago ago

      You can use Magit even if you're a Vim user. You don't have to buy into the whole Emacs system – you can treat Emacs as the virtual machine that runs Magit.

      • mschulze 4 hours ago ago

        Yes, I use Emacs 90% just for magit (and 10% for org-mode for some time tracking), but no text editing or coding at all.

      • tambourine_man 4 hours ago ago

        Yeah, but it's not as convenient.

    • veilrap 4 hours ago ago

      If you haven’t seen it you may want the fugitive plugin for vim. It seems to give a reasonable level of git magic within vim. Maybe not as magic as magit, but it does a lot including good handling of interactive rebases.

    • scocide 4 hours ago ago

      Magit was the only thing keeping me in emacs for a long time, but the neovim clone, neogit, is now 90% of the way there for my use cases, same interface same everything

      • codingcareer 4 hours ago ago

        Awesome! I had no idea! I will give it a shot :) Thanks ~

      • tambourine_man 4 hours ago ago

        I need to move to Neovim. Thanks for the nudge.

    • tcoff91 2 hours ago ago

      jj with jjui is even better, coming from someone who used magit for years.

    • baq 3 hours ago ago

      jj/jjui should have you covered

  • SoftTalker 2 hours ago ago

    Magit is absolutely the only reason I'm able to use git. And even at that it's still confusing. Yes I know tens of thousands of devs use it every day. I've got some kind of mental block with git. I used to use Mercurial and Subversion without any issues.

  • shpx 4 hours ago ago

    I want to quit Magit because it's unbearably slow. In a repo with 6000 files `git status` takes 100ms but the Magit equivalent takes 2-4 seconds.

    • ashton314 3 hours ago ago

      This will probably help:

          ;; Speed up magit status by removing some things
          (remove-hook 'magit-status-sections-hook 'magit-insert-tags-header)
          (remove-hook 'magit-status-sections-hook 'magit-insert-status-headers)
          (remove-hook 'magit-status-sections-hook 'magit-insert-unpushed-to-pushremote)
          (remove-hook 'magit-status-sections-hook 'magit-insert-unpulled-from-pushremote)
          (remove-hook 'magit-status-sections-hook 'magit-insert-unpulled-from-upstream)
          (remove-hook 'magit-status-sections-hook 'magit-insert-unpushed-to-upstream-or-recent)
    • BeetleB an hour ago ago

      It's because Magit is doing a lot more than just status. It executes multiple git commands to get all the information it wants to display.

      As a sibling said, you can disable much of that.

  • jwr 3 hours ago ago

    Magit is absolutely wonderful. It is one of the main tools I use daily to get my work done, especially now that AI does a lot of the work for me. I spend a lot of my time in magit looking at diffs!

    I would encourage anyone who relies on magit to sponsor tarsius to make his fantastic work sustainable.

  • nopurpose 5 hours ago ago

    I was missing magit, but then found `gitu` CLI and now use it happily for rebasing.

  • codingcareer 4 hours ago ago

    A couple years back I was tinkering with a spacemacs setup and I loved Magit!

    Over the years I opted to substitute most tools with simpler, UI-based ones (like LogSeq for org-mode) but I never found a good substitution for Magit.

    Having a whole spacemacs setup just for one tool is a bit overkill though, so I just use basic git and accept having to deal with interactive rebases manually.

    • vvillena 3 hours ago ago

      I have a Emacs + Spacemacs setup only for Magit. The base Spacemacs config works well, so I never had the need to tinker with it. Nowadays I don't care much about the rest of Emacs. It stays out of the way, and I keep happily using Magit.

  • antonyh 4 hours ago ago

    I bounced for a while between Magit and Tig, then ended up just using whatever the IDE provided combined with the CLI. I'm a frequent-but-not-daily Emacs user, so it boils down to the friction of switching tools. I should give up the Jetbrains IDEs and go all in on Emacs.

  • skrebbel 4 hours ago ago

    Ilove everything about this post.

    "It's super easy! Just do l-Akqr␍=u2025-06-01␍-s--tests␍b!"

    • akagr 2 hours ago ago

      The important part is you don’t have to remember that gobbledygook. I don’t know why author posted that key stroke list as it seems to remove value from this post and make it look harder than it is.

      Magit surfaces all available commands and options for you, along with key shortcuts as well as the actual git cli counterparts if you want to learn the raw command, too.

    • PaulDavisThe1st 3 hours ago ago

      from TFA:

      > That looks complicated, but remember how we built it: we looked at the hints and selected one option at a time. Now, if this is a log type we’ll use often, we are going to start to be able to write out that incantation without even looking at the hints. It’s both discoverable and efficient.

    • txru 3 hours ago ago

      These are indicated through context menus throughout specifying what the responses should be. It's a minimal UI though, and where `git rebase` is confusing magit rebase is confusing.

    • onfir3 2 hours ago ago

      Exactly my thought

  • skydhash 5 hours ago ago

    Magit does give you a surgeon control over the scapel that git is. Most git GUI wants to give you a nice dashboard. The latter is OK if you just want some logs stored (aka git commit and git push), but version control can be a powerful tool especially considering how non linear programming can be.

    A patch is an idea, not some snapshot of time. git allows for ideas manipulation. The rebase operation is adjusting ideas to fit a context. And with the reflog (which tracks every operations), you have undo for ideas manipulation.

  • sandinmyjoints 4 hours ago ago

    Rebasing in magit is so choice. I especially love magit-rebase-subset.

  • gnuduncan 4 hours ago ago

    magit is still my best firend in emacs :)