Hi, I've used Magit for real work for some time now and whenever I've come up with something that would improve my workflow or would be an improvement otherwise or is broken, I've immediately written it down to a list so that I don't forget it and I could work on it later. I present my current findings below in the hope that you could comment them, especially if some of them are not in "magit spirit" and would not be accepted to upstream version; I'd prefer not to maintain local patches. I have no intention to work on all of them, some are just "wild" ideas and/or too much work in the near future, but I do plan to pick some low hanging fruits every now and then. I just sent patches for the first ones I've picked so far.
* Modify P(ush) so that if you execute it over an unpushed commit, it pushes... ...upto that commit - I.e. git push origin HEAD~2:master etc * Add a command to move specified commits from the top of this branch... ...to a new branch - Effectively: git branch newbranch git reset --hard HEAD~3 # or whatever commit your were on top of - Or would it be sufficient to add a command to create a branch (without switching to it) and use that with X? * Branch `azu-foo' created in branch `bar' with "B", problem: Unpulled commits: fatal: ambiguous argument 'HEAD..origin/azu-foo': unknown revision or path not in the working tree. Use '--' to separate paths from revisions Unpushed commits: fatal: ambiguous argument 'origin/azu-foo..HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions Bogus .git/config entry for the new branch: [branch "azu-foo"] remote = origin merge = refs/heads/bar * Comment history cycling should change comment only below possible magit header - Now it can discard the header which feels dangerous. * What's the rationale of treating commits and diffs differently with respect to showing them? - Could one treat commits just like diffs so that they could be displayed with tab etc? -- Hiding/showing a commit could actually delete/load the content so that memory consumption wouldn't change. * git rebase --onto foo HEAD~1 seems difficult to do with Magit * Add option to make diffs highlight word differences? * When picking up pending commits, commit messages are defaulted incorrectly - I see duplicate commit messages - I see commit messages of commits that are no longer pending * r t doesn't remove Pending commits section, have to refresh * Highlight branches in log * Highlight my commits in log * Alternative way for amending Make C-c C-a work in magit buffers as well: essentially save HEAD~1's comment and "x" to HEAD~1 * Default point location after M-x magit-status RET If the file of the current buffer in which you invoke magit-status is in unstaged changes or untracked files area, move point on top of that file. * A key binding to invoke gitk - Real fast, ask for options only with prefix argument - Or maybe I should just make this a global binding of my own. * SPC + n in Unpushed commits list does not display next commit - Not consistent with log. - Make it display it if the current commit is visible in some window. - This would be irrelevant if one could display commits "inline" like diffs (see above). * If not on top of something that can be staged, s could move to the first stageable thing - Now moving to the right place first takes effort. - Similarly for some other commands. * Log filter popup-buffer - I'm still using gitk too much, especially gitk --all - Default filter: -<n> (log seems to work that way now) - Activate with C-c C-f (already in log buffer) or C-u l / C-u L * Editable, reorderable log - An alternative way for rewriting commits - Apply changes with C-c C-c using rebase. * Documentation about rewriting... "Typing `r s' will start a rewrite operation. You will be prompted for a _base_ commit, and all commits between the current head and this commit are put in a list of _Pending commits_ (including the base commit)." I find this "include base" not to be consistent with git's usage of term base, i.e. when rebasing, you move a set of commits on top of a new base and base is not included. * git-blame -> magit log buffer A command to jump to the corresponding line in magit log buffer from a region highlighted by git-blame-mode. (Or even without git-blame-mode?) * Not Magit-related: git-blame doesn't seem to work too well for me (Emacs 23) - Commit info messages are printed on wrong lines - "Error during redisplay: (error Lisp nesting exceeds `max-lisp-eval-depth')" * Add a key binding to invoke git gui blame until git-blame is usable Done: * Way to configure tab so that it toggles the entire file section... ...even when you are on top of a diff hunk. I never want to toggle visibility of diff hunks. * Unify C-u x and X; after all, C-u x is "X HEAD" Have X suggest HEAD by default. -- Hannu
