Am 03.07.23 um 20:45 schrieb Jens Lidestrom via GitGitGadget: > From: Jens Lidestrom <jens@xxxxxxxxxxxx> > > Signed-off-by: Jens Lidestrom <jens@xxxxxxxxxxxx> > --- > gitk-git/gitk | 23 +++++++++++++++-------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/gitk-git/gitk b/gitk-git/gitk > index 65ca11becca..351b88f10c0 100755 > --- a/gitk-git/gitk > +++ b/gitk-git/gitk > @@ -2690,6 +2690,7 @@ proc makewindow {} { > bind $ctext $ctxbut {pop_diff_menu %W %X %Y %x %y} > bind $ctext <Button-1> {focus %W} > bind $ctext <<Selection>> rehighlight_search_results > + bind . <$M1B-p> {cherrypick [selected_line_id]} > bind . <$M1B-t> {resethead [selected_line_id]} > bind . <$M1B-o> {checkout [selected_line_heads] [selected_line_id]} > bind . <$M1B-m> {rmbranch [selected_line_heads] [selected_line_id] 1} > @@ -2710,8 +2711,8 @@ proc makewindow {} { > {mc "Create tag" command mktag} > {mc "Copy commit reference" command copyreference} > {mc "Write commit to file" command writecommit} > - {mc "Create new branch" command mkbranch} > - {mc "Cherry-pick this commit" command cherrypick} > + {mc "Create new branch" command {mkbranch $rowmenuid}} > + {mc "Cherry-pick this commit" command {cherrypick $rowmenuid}} The change regarding Create new branch is not related to this commit's topic and should be elsewhere. > {mc "Reset current branch to here" command {resethead $rowmenuid}} > {mc "Mark this commit" command markhere} > {mc "Return to mark" command gotomark} > @@ -3186,6 +3187,7 @@ proc keys {} { > [mc "<%s-minus> Decrease font size" $M1T] > [mc "<F5> Update"] > [mc "<%s-T> Reset current branch to selected commit" $M1T] > +[mc "<%s-P> Cherry-pick selected commit to current branch" $M1T] > [mc "<%s-O> Check out selected commit" $M1T] > [mc "<%s-B> Create branch on selected commit" $M1T] > [mc "<%s-M> Remove selected branch" $M1T] > @@ -9758,24 +9760,29 @@ proc exec_citool {tool_args {baseid {}}} { > array set env $save_env > } > > -proc cherrypick {} { > - global rowmenuid curview > +proc cherrypick {id} { > + global curview headids > global mainhead mainheadid > global gitdir > > + if {! [info exists headids($mainhead)]} { > + error_popup [mc "Cannot cherry-pick to a detached head"] > + return > + } Why is it necessary to forbid this now? It was not forbidden before. > + > set oldhead [exec git rev-parse HEAD] > - set dheads [descheads $rowmenuid] > + set dheads [descheads $id] > if {$dheads ne {} && [lsearch -exact $dheads $oldhead] >= 0} { > set ok [confirm_popup [mc "Commit %s is already\ > included in branch %s -- really re-apply it?" \ > - [string range $rowmenuid 0 7] $mainhead]] > + [string range $id 0 7] $mainhead]] > if {!$ok} return > } > nowbusy cherrypick [mc "Cherry-picking"] > update > # Unfortunately git-cherry-pick writes stuff to stderr even when > # no error occurs, and exec takes that as an indication of error... > - if {[catch {exec sh -c "git cherry-pick -r $rowmenuid 2>&1"} err]} { > + if {[catch {exec sh -c "git cherry-pick -r $id 2>&1"} err]} { > notbusy cherrypick > if {[regexp -line \ > {Entry '(.*)' (would be overwritten by merge|not uptodate)} \ > @@ -9791,7 +9798,7 @@ proc cherrypick {} { > resolve it?"]]} { > # Force citool to read MERGE_MSG > file delete [file join $gitdir "GITGUI_MSG"] > - exec_citool {} $rowmenuid > + exec_citool {} $id > } > } else { > error_popup $err