Rebasing.
This commit is contained in:
parent
14b1153589
commit
22ee4f7685
2 changed files with 49 additions and 7 deletions
37
magit.el
37
magit.el
|
@ -17,7 +17,7 @@
|
|||
;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
;; Boston, MA 02111-1307, USA.
|
||||
|
||||
;;; Introduction
|
||||
;;; Commentary
|
||||
|
||||
;; Invoking the magit-status function will show a buffer with the
|
||||
;; current status of the current git repository and its checkout.
|
||||
|
@ -223,6 +223,7 @@
|
|||
(define-key map (kbd "B") 'magit-create-branch)
|
||||
(define-key map (kbd "m") 'magit-manual-merge)
|
||||
(define-key map (kbd "M") 'magit-automatic-merge)
|
||||
(define-key map (kbd "R") 'magit-rebase-step)
|
||||
(define-key map (kbd "U") 'magit-pull)
|
||||
(define-key map (kbd "P") 'magit-push)
|
||||
(define-key map (kbd "c") 'magit-log-edit)
|
||||
|
@ -423,6 +424,9 @@ pushed.
|
|||
(magit-concat-with-delim
|
||||
", "
|
||||
(mapcar 'magit-name-rev merge-heads))))))
|
||||
(let ((rebase (magit-rebase-info)))
|
||||
(if rebase
|
||||
(insert (apply 'format "Rebasing: %s (%s of %s)\n" rebase))))
|
||||
(insert "\n")
|
||||
(magit-insert-section 'untracked
|
||||
"Untracked files:" 'magit-wash-other-files
|
||||
|
@ -590,6 +594,37 @@ pushed.
|
|||
(interactive (list (magit-read-rev "Merge from branch: ")))
|
||||
(magit-run "git" "merge" branch))
|
||||
|
||||
;;; Rebasing
|
||||
|
||||
(defun magit-rebase-info ()
|
||||
(cond ((file-exists-p ".dotest")
|
||||
(list (magit-name-rev (car (magit-file-lines ".dotest/onto")))
|
||||
(car (magit-file-lines ".dotest/next"))
|
||||
(car (magit-file-lines ".dotest/last"))))
|
||||
((file-exists-p ".git/.dotest-merge")
|
||||
(list (car (magit-file-lines ".git/.dotest-merge/onto_name"))
|
||||
(car (magit-file-lines ".git/.dotest-merge/msgnum"))
|
||||
(car (magit-file-lines ".git/.dotest-merge/end"))))
|
||||
(t
|
||||
nil)))
|
||||
|
||||
(defun magit-rebase-step ()
|
||||
(interactive)
|
||||
(let ((info (magit-rebase-info)))
|
||||
(if (not info)
|
||||
(magit-run "git" "rebase" (magit-read-rev "Rebase against: "))
|
||||
(let ((cursor-in-echo-area t)
|
||||
(message-log-max nil))
|
||||
(message "Rebase in progress. Abort, Skip, or Continue? ")
|
||||
(let ((reply (read-event)))
|
||||
(case reply
|
||||
((?A ?a)
|
||||
(magit-run "git" "rebase" "--abort"))
|
||||
((?S ?s)
|
||||
(magit-run "git" "rebase" "--skip"))
|
||||
((?C ?c)
|
||||
(magit-run "git" "rebase" "--continue"))))))))
|
||||
|
||||
;;; Resetting
|
||||
|
||||
(defun magit-reset-soft (target)
|
||||
|
|
19
magit.texi
19
magit.texi
|
@ -194,8 +194,8 @@ You can also mark the current commit by typing @kbd{.}. Once you have
|
|||
marked a commit, you can show the differences between it and the
|
||||
current commit by typing @kbd{=}.
|
||||
|
||||
@node Rewriting History
|
||||
@chapter Rewriting History
|
||||
@node Resetting
|
||||
@chapter Resetting
|
||||
|
||||
Once you have added a commit to your local repository, you can not
|
||||
change it anymore in any way. But you can reset your current head to
|
||||
|
@ -224,9 +224,6 @@ current head, but it will reset your working tree and staging area
|
|||
back to the last comitted state. You can do this to abort a manual
|
||||
merge, for example.
|
||||
|
||||
Rebasing is a more powerful way to rewrite history. It is so
|
||||
powerful, it has its own chapter. See @ref{Rebasing}.
|
||||
|
||||
@node Branching and Merging
|
||||
@chapter Branching and Merging
|
||||
|
||||
|
@ -269,7 +266,17 @@ from a merge, you should abort it.
|
|||
@node Rebasing
|
||||
@chapter Rebasing
|
||||
|
||||
not yet implemented.
|
||||
Typing @kbd{R} in the status buffer will initiate a rebase or, if one
|
||||
is already in progress, ask you how to continue.
|
||||
|
||||
When a rebase is stopped in the middle because of a conflict, the
|
||||
header of the status buffer will indicate what you are rebasing your
|
||||
current branch onto and how far along you are in the series of commits
|
||||
that are being replayed.
|
||||
|
||||
Of course, you can initiate a rebase in any number of ways, by
|
||||
configuring @code{git pull} to rebase instead of merge, for example.
|
||||
Such a rebase can be finished with Magit as well.
|
||||
|
||||
@node Pushing and Pulling
|
||||
@chapter Pushing and Pulling
|
||||
|
|
Loading…
Reference in a new issue