68 lines
2.4 KiB
EmacsLisp
68 lines
2.4 KiB
EmacsLisp
;;; module-magit.el --- git integration
|
|
;;;
|
|
;;; Commentary:
|
|
;;;
|
|
;;; Setup git integration with Emacs.
|
|
;;;
|
|
;;; Code:
|
|
|
|
(require 'module-pkg)
|
|
|
|
(pkg/require 'magit)
|
|
(pkg/require 'magit-popup)
|
|
|
|
(with-eval-after-load 'magit
|
|
|
|
(setq magit-display-buffer-function
|
|
#'magit-display-buffer-same-window-except-diff-v1)
|
|
|
|
;; git reset --soft $(git merge-base branch1 branch2)
|
|
(defun magit-reset-to-merge-base ()
|
|
"Reset to merge-base of two branches using Magit's branch selection."
|
|
(interactive)
|
|
(require 'magit)
|
|
(let* ((branch1 (magit-read-branch "Select first branch: "))
|
|
(branch2 (magit-read-branch "Select second branch: "))
|
|
(merge-base (magit-git-string "merge-base" branch1 branch2)))
|
|
(if merge-base
|
|
(progn
|
|
(magit-reset-internal "--soft" merge-base)
|
|
(message "Reset to merge-base of %s and %s" branch1 branch2))
|
|
(user-error "No merge-base found between %s and %s" branch1 branch2))))
|
|
|
|
;; git reset --soft @{u}
|
|
(defun magit-reset-to-upstream ()
|
|
"Reset to upstream of the current branch using Magit."
|
|
(interactive)
|
|
(require 'magit)
|
|
(let ((current-branch (magit-get-current-branch)))
|
|
(if current-branch
|
|
(let ((upstream (magit-get-upstream-branch current-branch)))
|
|
(if upstream
|
|
(progn
|
|
(magit-reset-internal "--soft" "@{u}")
|
|
(message "Reset to upstream of %s (%s)" current-branch upstream))
|
|
(user-error "No upstream branch set for %s" current-branch)))
|
|
(user-error "Not on a branch"))))
|
|
|
|
(defvar my/magit-prefix-map (make-sparse-keymap))
|
|
(define-key ctl-x-map "g" my/magit-prefix-map)
|
|
(define-key my/magit-prefix-map "g" #'magit-status)
|
|
(define-key my/magit-prefix-map "rb" #'magit-reset-to-merge-base)
|
|
(define-key my/magit-prefix-map "ru" #'magit-reset-to-upstream)
|
|
(define-key my/magit-prefix-map "ll" #'magit-log)
|
|
(define-key my/magit-prefix-map "la" #'magit-log-all)
|
|
(define-key my/magit-prefix-map "lf" #'magit-log-buffer-file)
|
|
(define-key my/magit-prefix-map "Rs" #'magit-reset-soft)
|
|
(define-key my/magit-prefix-map "Rh" #'magit-reset-hard)
|
|
(define-key my/magit-prefix-map "!" #'magit-run)
|
|
(define-key my/magit-prefix-map "bb" #'magit-branch)
|
|
(define-key my/magit-prefix-map "bc" #'magit-branch-create)
|
|
(define-key my/magit-prefix-map "bs" #'magit-branch-checkout)
|
|
(define-key my/magit-prefix-map "mm" #'magit-merge)
|
|
(define-key my/magit-prefix-map "dd" #'magit-diff))
|
|
|
|
(provide 'module-magit)
|
|
|
|
;;; module-magit.el ends here.
|