วิธีที่ง่ายที่สุดในการสลับกิ่งก้านสาขา


21

ตอนนี้ฉันใช้ fugitive เพื่อจัดการ git เกือบทุกอย่างที่เกี่ยวข้อง แต่ฉันไม่สามารถหาเวิร์กโฟลว์ที่ดีในการมองเห็นและสลับระหว่างสาขาที่มีอยู่ได้อย่างรวดเร็ว

ฉันสามารถทำได้:Git checkout <branch-name>ปัญหาคือการเติมข้อความอัตโนมัติทั้งชื่อไฟล์และสาขาและฉันต้องการรายการสาขา

คำตอบ:


12

ในการสรุปคำตอบที่นี่เป็นวิธีที่จะทำให้สิ่งนี้บรรลุผล:

Vanilla Terminal Vim

กดCTRL- Zในโหมดปกติคุณจะกลับไปที่เปลือกและหยุด Vim หลังจากดำเนินการgit checkout [branchname]พิมพ์fgคำสั่งของคุณเพื่อกลับไปยัง Vim ที่ถูกระงับซึ่งจะบังคับให้ Vim รีเฟรช

Vanilla GUI Vim

การใช้งาน gvim บางอย่างจะมี:shellการสนับสนุนซึ่งจะเปิดเชลล์ภายใน Vim โดยใช้เทอร์มินัลโง่ อย่างไรก็ตามการพิมพ์อาจจะง่ายกว่า:

:!git checkout [branchname]

สิ่งนี้จะดำเนินการคำสั่งโดยไม่ต้องเปิดเชลล์พรอมต์ใหม่ (ตัวเลือกนี้สามารถใช้งานได้ใน terminal Vim)

เป็นกลุ่มผู้ลี้ภัย-

vim-fugitiveเป็นปลั๊กอินที่ให้คุณใช้ Git จากภายใน Vim คำสั่งจะเป็น:

:Git checkout [branchname]

เป็นกลุ่ม-merginal

vim-merginalเป็นปลั๊กอินที่ใช้vim-fugitiveและจัดเตรียมอินเตอร์เฟสที่เป็นมิตรกับผู้ใช้

  1. ประเภท:Merginal.
  2. เลื่อนเคอร์เซอร์ไปยังสาขาที่คุณต้องการ
  3. พิมพ์ccเพื่อตรวจสอบสาขานั้น

1
มันfugitiveไม่ใช่fugativeและนั่นคือสิ่งที่ OP ใช้อยู่แล้ว
muru

1
คำตอบที่ยอดเยี่ยม vim-merginalคือสิ่งที่ฉันกำลังมองหา
Sergio D. Márquez

1
ฉันชอบctrl-zเพราะมันโหลดไฟล์อัตโนมัติ เพื่อนร่วมงานต้องการมีหน้าต่าง tmux สำหรับบรรทัดคำสั่งและอีกหนึ่งสำหรับกลุ่ม แต่เมื่อพวกเขาทำการเช็คเอาท์หรือผสานเมื่อพวกเขากลับไปเป็นกลุ่มพวกเขาต้องไปที่แต่ละไฟล์ที่เปิดอยู่และ:e!แต่ละครั้ง ( :bufdo e) ซึ่งเป็นความเจ็บปวดที่ต้องจำ แต่จะง่ายกว่าctrl-zเมื่อfgเกิดขึ้น Vim จะทำการแสดงแบบ:eอัตโนมัติอย่างน่าอัศจรรย์
Sukima

I ส่วนขยายผู้ลี้ภัยที่ดีอีกอย่างที่คุณสามารถเพิ่มลงในรายการ: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez

ในกรณีที่เช็คเอาต์ git เรียบร้อยแล้ว:checktimeมีประโยชน์ในการโหลดบัฟเฟอร์ที่เปิดอยู่ทั้งหมด
LEI

12

ใช้ปลั๊กอินvim-merginal ( ส่วนขยายผู้ลี้ภัย ) มันมี TUI แบบโต้ตอบสำหรับ:

  • ดูรายการของสาขา
  • ตรวจสอบสาขาจากรายการนั้น
  • สร้างสาขาใหม่
  • การลบสาขา
  • ผสานสาขา
  • การคืนสาขา
  • การแก้ไขข้อขัดแย้งผสาน
  • การโต้ตอบกับรีโมท (ดึง, ดึง, ดึงข้อมูล, ติดตาม)
  • แตกต่างกับกิ่งอื่น
  • เปลี่ยนชื่อสาขา
  • การดูประวัติคอมไพล์สำหรับสาขา

ป้อนคำอธิบายรูปภาพที่นี่


7

คุณควรโอบกอดเครื่องของคุณ หากคุณใช้CTRL-Zมันจะเป็นพื้นหลังเป็นกลุ่ม (หรือกระบวนการใดที่คุณกำลังทำงานอยู่) จากนั้นคุณสามารถเรียกใช้คำสั่งใด ๆ ที่คุณต้องการfgเพื่อนำกระบวนการกลับสู่เบื้องหน้า:

<CTRL-Z>
git checkout <tab>
fg

3
... และเมื่อใช้ GVim
muru

2
:shellเป็นวิธีที่จะไปหรือ alt tabbing ในการจำลอง terminal ที่คุณชื่นชอบอื่น ๆ
65-e9-7e-17

2
ฉันชอบเสมอ!git checkout [branchname]
bronzehedwick

5

ผู้หลบหนีGit checkout <branch>มีข้อเสียที่ไม่ได้เติมชื่อสาขาให้โดยอัตโนมัติ ใช้fzf.vimฉันได้สร้างคำสั่งนี้:

function! s:changebranch(branch) 
    execute 'Git checkout' . a:branch
    call feedkeys("i")
endfunction

command! -bang Gbranch call fzf#run({
            \ 'source': 'git branch -a --no-color | grep -v "^\* " ', 
            \ 'sink': function('s:changebranch')
            \ })

หวังว่าคุณจะพบว่ามีประโยชน์


1

คำตอบที่ได้รับจาก @ kubek2k นั้นยอดเยี่ยมมาก ทางออกนั้นดีกว่าที่ฉันจะจินตนาการและนำไปใช้ในโค้ดที่น้อยลงซึ่งฉันสามารถถ่ายภาพได้ มันเปิดประตูเพื่อช่วยให้ฉันเข้าใจการใช้งานส่วนบุคคลที่มีประสิทธิภาพของ 'fzf'

ฉันได้ปรับเปลี่ยนเล็กน้อยเพื่อให้เพิ่มเติม:

  1. ใช้ผู้ลี้ภัยเพื่อรับการอ้างอิงแทนบรรทัดคำสั่ง (รองรับ Windows ได้ดีขึ้น)
  2. รายการแท็กพร้อมกับสาขา

นี่คือการปรับเปลี่ยนเล็กน้อย:

function! s:gitCheckoutRef(ref) 
    execute('Git checkout ' . a:ref)
    " call feedkeys("i")
endfunction
function! s:gitListRefs()
   let l:refs = execute("Git for-each-ref --format='\\%(refname:short)'")
   return split(l:refs,'\r\n*')[1:] "jump past the first line which is the git command
endfunction
command! -bang Gbranch call fzf#run({ 'source': s:gitListRefs(), 'sink': function('s:gitCheckoutRef'), 'dir':expand('%:p:h') })
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.