[PATCH 02/03] Adding checkout function for commitish in git.el
From: Rémi Vanicat <hidden>
Date: 2016-06-15 22:44:14
Subsystem:
the rest · Maintainer:
Linus Torvalds
Possibly related (same subject, not in this thread)
- 2016-06-15 · Re: [PATCH 02/03] Adding checkout function for commitish in git.el · Alexandre Julliard <hidden>
M-x git-checkout ask for a commitish, and checkout it as in git checkout commitish -- key binding: "C" M-x git-branch ask for the name of a new branch, create it and checkout it as in git checkout -b name key binding: "b" M-x git-create-branch ask for a new branchname, a startpoint (a commitish) and create a new branch as in git branch branchname startpoint key binding "B" A menu is also available for just switching branch --- The main problem that I still see, is the error message when one try to checkout a branch/tag... that doesn't exist: it is a cryptic error message... contrib/emacs/git.el | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el
index 16d9771..f180421 100644
--- a/contrib/emacs/git.el
+++ b/contrib/emacs/git.el@@ -1175,6 +1175,44 @@ nil otherwise" (git-list-tags))) () () () () default)) +(defun git-checkout (branch &optional merge) + "checkout a branch, tag, or any commitish + +use a prefix arg if git should merge while checking out" + (interactive + (list (git-read-commitish "Branch: ") + current-prefix-arg)) + (let ((args (list branch "--"))) + (if merge (push "-m" args)) + (if (apply #'git-call-process-display-error "checkout" args) + (git-refresh-status)))) + +(defun git-branch (branch) + "branch from current commit and checkout the new branch" + (interactive "MBranch: ") + (if (git-call-process-display-error "checkout" "-b" branch) + (git-refresh-status))) + +(defun git-create-branch (branch start-point) + "create a new branch named [branch] from the [start-point]" + (interactive + (list (read-string "New branch: ") + (git-read-commitish "Start point(HEAD): " "HEAD"))) + (git-call-process-display-error "branch" branch start-point)) + +(defun git-checkout-menu-filter (rest) + "define the change branch menu" + (append + (mapcar + (lambda (branch) + `[,(car branch) + (git-checkout ,(car branch)) + :style radio + :selected ,(cdr branch)]) + (git-list-branches)) + (list ["checkout any commitish" git-checkout t] + ["change to new" git-branch t]))) + (defun git-diff-file () "Diff the marked file(s) against HEAD." (interactive)
@@ -1466,6 +1504,9 @@ amended version of it." (define-key map "a" 'git-add-file) (define-key map "c" 'git-commit-file) (define-key map "\C-c" commit-map) + (define-key map "C" 'git-checkout) + (define-key map "b" 'git-branch) + (define-key map "B" 'git-create-branch) (define-key map "d" diff-map) (define-key map "=" 'git-diff-file) (define-key map "f" 'git-find-file)
@@ -1513,6 +1554,7 @@ amended version of it." `("Git" ["Refresh" git-refresh-status t] ["Commit" git-commit-file t] + ("Checkout Branch" :filter git-checkout-menu-filter) ("Merge" ["Next Unmerged File" git-next-unmerged-file t] ["Prev Unmerged File" git-prev-unmerged-file t]
--
1.5.4.1.123.gcb68-dirty
--
Rémi Vanicat