Enable discarding individual hunks
This commit is contained in:
parent
357fbdbcf9
commit
faeb3a9726
@ -1551,8 +1551,11 @@ function! fugitive#BufReadStatus() abort
|
|||||||
nnoremap <buffer> <silent> q :<C-U>if bufnr('$') == 1<Bar>quit<Bar>else<Bar>bdelete<Bar>endif<CR>
|
nnoremap <buffer> <silent> q :<C-U>if bufnr('$') == 1<Bar>quit<Bar>else<Bar>bdelete<Bar>endif<CR>
|
||||||
nnoremap <buffer> <silent> r :<C-U>exe <SID>ReloadStatus()<CR>
|
nnoremap <buffer> <silent> r :<C-U>exe <SID>ReloadStatus()<CR>
|
||||||
nnoremap <buffer> <silent> R :<C-U>exe <SID>ReloadStatus()<CR>
|
nnoremap <buffer> <silent> R :<C-U>exe <SID>ReloadStatus()<CR>
|
||||||
nnoremap <buffer> <silent> U :<C-U>echoerr 'Changed to g<Bar>'<CR>
|
nnoremap <buffer> <silent> U :<C-U>echoerr 'Changed to X'<CR>
|
||||||
nnoremap <buffer> <silent> g<Bar> :<C-U>execute <SID>StageUndo()<CR>
|
nnoremap <buffer> <silent> g<Bar> :<C-U>execute <SID>StageDelete(line('.'),v:count)<CR>
|
||||||
|
xnoremap <buffer> <silent> g<Bar> :<C-U>execute <SID>StageDelete(line("'<"),line("'>")-line("'<")+1)<CR>
|
||||||
|
nnoremap <buffer> <silent> X :<C-U>execute <SID>StageDelete(line('.'),v:count)<CR>
|
||||||
|
xnoremap <buffer> <silent> X :<C-U>execute <SID>StageDelete(line("'<"),line("'>")-line("'<")+1)<CR>
|
||||||
nnoremap <buffer> . : <C-R>=<SID>fnameescape(get(<SID>StatusCfile(),0,''))<CR><Home>
|
nnoremap <buffer> . : <C-R>=<SID>fnameescape(get(<SID>StatusCfile(),0,''))<CR><Home>
|
||||||
nnoremap <buffer> <silent> g? :help fugitive-:Gstatus<CR>
|
nnoremap <buffer> <silent> g? :help fugitive-:Gstatus<CR>
|
||||||
nnoremap <buffer> <silent> <F1> :help fugitive-:Gstatus<CR>
|
nnoremap <buffer> <silent> <F1> :help fugitive-:Gstatus<CR>
|
||||||
@ -2056,29 +2059,6 @@ function! s:StageReloadSeek(target,lnum1,lnum2) abort
|
|||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:StageUndo() abort
|
|
||||||
let info = s:StageInfo(line('.'))
|
|
||||||
if empty(info.filename)
|
|
||||||
return ''
|
|
||||||
endif
|
|
||||||
let hash = s:TreeChomp('hash-object', '-w', './' . info.filename)
|
|
||||||
if !empty(hash)
|
|
||||||
if info.status ==# 'U'
|
|
||||||
call s:TreeChomp('rm', './' . info.filename)
|
|
||||||
elseif info.status ==# '?'
|
|
||||||
call s:TreeChomp('clean', '-f', './' . info.filename)
|
|
||||||
elseif info.section ==# 'Unstaged'
|
|
||||||
call s:TreeChomp('checkout', './' . info.filename)
|
|
||||||
else
|
|
||||||
call s:TreeChomp('checkout', 'HEAD^{}', './' . info.filename)
|
|
||||||
endif
|
|
||||||
call s:StageReloadSeek([info.filename, ''], line('.'), line('.'))
|
|
||||||
let @" = hash
|
|
||||||
return 'checktime|redraw|echomsg ' .
|
|
||||||
\ string('To restore, :Git cat-file blob '.hash[0:6].' > '.info.filename)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:StageInline(mode, ...) abort
|
function! s:StageInline(mode, ...) abort
|
||||||
let lnum1 = a:0 ? a:1 : line('.')
|
let lnum1 = a:0 ? a:1 : line('.')
|
||||||
let lnum = lnum1 + 1
|
let lnum = lnum1 + 1
|
||||||
@ -2258,6 +2238,34 @@ function! s:StageApply(info, lnum1, count, reverse, extra) abort
|
|||||||
return v:shell_error ? output : ''
|
return v:shell_error ? output : ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:StageDelete(lnum, count) abort
|
||||||
|
let info = s:StageInfo(a:lnum)
|
||||||
|
if empty(info.filename)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
let hash = s:TreeChomp('hash-object', '-w', './' . info.filename)
|
||||||
|
if empty(hash)
|
||||||
|
return ''
|
||||||
|
elseif info.offset >= 0
|
||||||
|
let output = s:StageApply(info, a:lnum, a:count, 1, info.section ==# 'Staged' ? ['--index'] : [])
|
||||||
|
if len(output)
|
||||||
|
return 'echoerr ' . string(output)
|
||||||
|
endif
|
||||||
|
elseif info.status ==# 'U'
|
||||||
|
call s:TreeChomp('rm', './' . info.filename)
|
||||||
|
elseif info.status ==# '?'
|
||||||
|
call s:TreeChomp('clean', '-f', './' . info.filename)
|
||||||
|
elseif info.section ==# 'Unstaged'
|
||||||
|
call s:TreeChomp('checkout', './' . info.filename)
|
||||||
|
else
|
||||||
|
call s:TreeChomp('checkout', 'HEAD^{}', './' . info.filename)
|
||||||
|
endif
|
||||||
|
exe s:ReloadStatus()
|
||||||
|
let @@ = hash
|
||||||
|
return 'redraw|echomsg ' .
|
||||||
|
\ string('To restore, :Git cat-file blob '.hash[0:6].' > '.info.filename)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:StageToggle(lnum1, count) abort
|
function! s:StageToggle(lnum1, count) abort
|
||||||
if a:lnum1 == 1 && a:count == 0
|
if a:lnum1 == 1 && a:count == 0
|
||||||
return 'Gedit .git/|call search("^index$", "wc")'
|
return 'Gedit .git/|call search("^index$", "wc")'
|
||||||
|
@ -58,14 +58,14 @@ that are part of Git repositories).
|
|||||||
dp |:Git| add --intent-to-add (untracked files)
|
dp |:Git| add --intent-to-add (untracked files)
|
||||||
dv |:Gvdiff|
|
dv |:Gvdiff|
|
||||||
gO |:Gvsplit|
|
gO |:Gvsplit|
|
||||||
g| |:Git| checkout
|
|
||||||
g| |:Git| checkout HEAD (staged files)
|
|
||||||
g| |:Git| clean (untracked files)
|
|
||||||
g| |:Git| rm (unmerged files)
|
|
||||||
O |:Gtabedit|
|
O |:Gtabedit|
|
||||||
o |:Gsplit|
|
o |:Gsplit|
|
||||||
P |:Git| add --patch
|
P |:Git| add --patch
|
||||||
P |:Git| reset --patch (staged files)
|
P |:Git| reset --patch (staged files)
|
||||||
|
X |:Git| checkout
|
||||||
|
X |:Git| checkout HEAD (staged files)
|
||||||
|
X |:Git| clean (untracked files)
|
||||||
|
X |:Git| rm (unmerged files)
|
||||||
q close status
|
q close status
|
||||||
r reload status
|
r reload status
|
||||||
. enter |:| command line with file prepopulated
|
. enter |:| command line with file prepopulated
|
||||||
|
Loading…
Reference in New Issue
Block a user