From: Shawn O. Pearce Date: Thu, 28 Dec 2006 01:43:36 GMT Subject: [PATCH 1/2] Teach git-reset to let others override its reflog entry. Message-ID: <20061228014336.GA16790@spearce.org> When git-rebase invokes `git reset --hard` to rewind the user's branch prior to starting to reapply each commit this is showing up in the reflog as a simple `git reset --hard ` but its not clear to the end-user inspecting the log why there is a reset. The new --reflog-action for git-reset behaves like the same option to git-merge; it can be used by the caller to override the message entry in the reflog and is intended to be used only when git-reset is acting as plumbing, not porcelain. Signed-off-by: Shawn O. Pearce --- Documentation/git-reset.txt | 5 +++++ git-rebase.sh | 4 ++-- git-reset.sh | 8 ++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt index 4f42478..7eaa186 100644 --- a/Documentation/git-reset.txt +++ b/Documentation/git-reset.txt @@ -45,6 +45,11 @@ OPTIONS switched to. Any changes to tracked files in the working tree since are lost. +--reflog-action=:: + This is used internally when `git-rebase` calls this command + to reset the current branch prior to merging the rebased + commits onto it. + :: Commit to make the current HEAD. diff --git a/git-rebase.sh b/git-rebase.sh index ece3142..b99f1e3 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -174,7 +174,7 @@ do else die "No rebase in progress?" fi - git reset --hard ORIG_HEAD + git reset --reflog-action="rebase: abort" --hard ORIG_HEAD exit ;; --onto) @@ -293,7 +293,7 @@ fi # Rewind the head to "$onto"; this saves our current head in ORIG_HEAD. echo "First, rewinding head to replay your work on top of it..." -git-reset --hard "$onto" +git-reset --hard --reflog-action="rebase: rewind to $onto_name" "$onto" # If the $onto is a proper descendant of the tip of the branch, then # we just fast forwarded. diff --git a/git-reset.sh b/git-reset.sh index 2379db0..7ef6789 100755 --- a/git-reset.sh +++ b/git-reset.sh @@ -6,7 +6,7 @@ USAGE='[--mixed | --soft | --hard] [] [ [--] ...]' SUBDIRECTORY_OK=Yes . git-sh-setup -update= reset_type=--mixed +rloga= update= reset_type=--mixed unset rev while case $# in 0) break ;; esac @@ -15,6 +15,9 @@ do --mixed | --soft | --hard) reset_type="$1" ;; + --reflog-action=*) + rloga=`expr "z$1" : 'z-[^=]*=\(.*\)'` + ;; --) break ;; @@ -81,7 +84,8 @@ then else rm -f "$GIT_DIR/ORIG_HEAD" fi -git-update-ref -m "reset $reset_type $*" HEAD "$rev" +test "$rloga" = '' && rloga="reset $reset_type $*" +git-update-ref -m "$rloga" HEAD "$rev" update_ref_status=$? case "$reset_type" in -- 1.4.4.3.gd2e4