ฉันจะยกเลิกการเปลี่ยนแปลงไฟล์จากหน้าต่างสถานะผู้ลี้ภัยได้อย่างไร


33

เมื่ออยู่ในที่หลบหนีปลั๊กอิน หน้าต่างสถานะ , เข้าถึงได้โดยใช้:Gstatusมันเป็นไปได้ที่จะมีการเปลี่ยนแปลงต่างสำหรับแฟ้มใช้และสลับไฟล์สำหรับการกระทำโดยใช้D-

มีทางลัดที่คล้ายกันในการยกเลิกการเปลี่ยนแปลงหรือไม่โดยที่การทิ้งฉันหมายถึงเทียบเท่าgit checkout -- filenameหรือไม่

ปรับปรุง:

พบการร้องขอคุณสมบัติในหน้าgithubผู้ลี้ภัยปัญหา # 97: ทางลัดเพื่อชำระเงิน / ลบไฟล์

ตามวิธีที่ต้องการใช้ :Gread :w

อัปเดต 2:

ตั้งแต่มิถุนายน 2014 เป็นไปได้ใช้Uเป็นคำตอบโดยแอนสัน ด้านล่าง

อัปเดต 3: ตั้งแต่วันที่ 3 มกราคม 2019การผูกกุญแจจะถูกจับคู่กับX

คำตอบ:


27

ฟังก์ชั่นนี้ถูกบันทึกอยู่ในเดือนมิถุนายนปี 2014 Uและเป็นค่าเริ่มต้นแมปไป

ข้อมูลนี้อยู่ในไฟล์ช่วยเหลือภายใต้:h :Gstatus:

     U     |:Git| checkout HEAD

คำขอและการอภิปรายเกี่ยวกับคุณลักษณะ:
https://github.com/tpope/vim-fugitive/issues/97

กระทำ:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63


หากไม่มีเอกสารก็อาจตีความได้ว่าไม่ปลอดภัย จะไม่ยากไหมที่จะทราบว่าคุณขัดขวางการเปลี่ยนแปลงในพื้นที่ของคุณเนื่องจากการกดแป้นเวทที่ไม่มีเอกสาร?
sehe

2
2019 อัปเดตเลยตอนนี้X
Oguz Bilgic

ทุกคนที่มีสิทธิ์แก้ไขโปรดแก้ไขเป็น X หรือไม่
chriz

15

คุณสามารถใช้ผู้ลี้ภัย ‘s Greadคำสั่งเพื่อแทนที่เนื้อหาของบัฟเฟอร์ที่มีสลับรุ่นต่างๆของไฟล์บัฟเฟอร์ของ (เช่นนี้จะต้องทำจากบัฟเฟอร์ของไฟล์ไม่ได้มาจาก:Gstatusบัฟเฟอร์)

  • :Gread(ที่มีข้อโต้แย้งไม่ได้) จะใช้รุ่นของแฟ้มจากดัชนี†
  • :Gread - จะใช้เวอร์ชันของไฟล์จากการกำหนด HEAD

ดูเอกสารประกอบที่:help fugitive-revisionสำหรับรายการของข้อกำหนดการแก้ไขอื่น ๆ ที่สนับสนุนผู้ลี้ภัย (ทั้งสองข้างต้นน่าจะเป็นประโยชน์มากที่สุดทันที)

:Greadเวิร์กโฟลว์ดำเนินการเช่นนี้

  1. :Gread
  2. ผู้ลี้ภัยล้างบัฟเฟอร์ปัจจุบันและอ่านเนื้อหาจากดัชนี
  3. ผลลัพธ์ : บัฟเฟอร์ตอนนี้มีเนื้อหาเหมือนกับดัชนี ไฟล์แผนผังการทำงานจะไม่เปลี่ยนแปลง
  4. คุณสามารถติดตาม:wเพื่อบันทึกไฟล์ไปยังแผนผังการทำงาน (หรือใช้:Gread|wถ้าคุณรู้ว่าคุณจะต้องการบันทึกทันที)

:Git checkout -- %เวิร์กโฟลว์ดำเนินการเช่นนี้

  1. :Git checkout -- %
  2. Git คัดลอกเวอร์ชันของไฟล์ในดัชนีไปยังไฟล์ในแผนผังการทำงาน
  3. เป็นกลุ่มสังเกตว่าไฟล์มีการเปลี่ยนแปลงภายนอกตัวแก้ไขและแจ้งให้คุณละเว้นหรือโหลดซ้ำ
  4. คุณบอกให้ Vim ทำการโหลดไฟล์อีกครั้ง
  5. ผลลัพธ์ : ทั้งไฟล์ต้นไม้ทำงานและบัฟเฟอร์ตอนนี้มีเนื้อหาจากดัชนี

สรุป: :Greadหลีกเลี่ยงพรอมต์“ ไฟล์มีการเปลี่ยนแปลงตั้งแต่เริ่มแก้ไข” และช่วยให้คุณตัดสินใจได้ว่าเมื่อใดที่คุณต้องการแก้ไขไฟล์ในแผนผังการทำงาน


เมื่อบัฟเฟอร์แทนขั้นตอนดัชนีของไฟล์แทนที่จะเป็นไฟล์จากแผนผังการทำงานให้:Greadอ่านจากเนื้อหาของไฟล์ที่มีอยู่บนดิสก์ในแผนผังการทำงานแทนที่จะเป็นสเตจ 0 ของดัชนี


การทำแผนที่สำหรับ gstatus เพื่อย้อนกลับไฟล์:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor

1

การแม็พสำหรับ gstatus เพื่อย้อนกลับไฟล์:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>

สิ่งนี้ใช้งานได้ดีข้อเสียเพียงอย่างเดียวคือฉันจะได้รับกล่องโต้ตอบว่าไฟล์มีการเปลี่ยนแปลงบนดิสก์และหากฉันต้องการโหลดซ้ำ จะดีถ้ามันเงียบ
tidbeck

1
นั่นคือ IMO ที่ดียิ่งขึ้นเมื่อคุณได้รับการยืนยันว่าไฟล์ถูกเปลี่ยนกลับจริงๆ แต่การโหลดเงียบอัตโนมัติสามารถทำได้ด้วยตัวเลือก 'autoread' ( :help autoread) อื่น ๆ แล้วที่คุณจะทำได้ภายในดังกล่าวข้างต้นbufdo e au
majkinetor

0

คุณลองแล้ว:help fugitiveเหรอ?

เห็นได้ชัดว่าไม่มีทางลัดสำหรับคุณสมบัติ Git นี้


ใช่ฉันทำ. มีหลายครั้งที่ฉันไม่พบคุณลักษณะในความช่วยเหลือที่มีอยู่ไม่น้อย ความคิดเห็นของคุณที่คุณไม่ควรถามเกี่ยวกับคุณสมบัติที่ไม่ได้อยู่ในความช่วยเหลือสำหรับโปรแกรม / ปลั๊กอินคืออะไร?
tidbeck

ใช่มันเกิดขึ้นกับฉันเช่นกัน: มีฟังก์ชั่นที่ฉันสามารถทำได้:callแต่ไม่มีคำสั่งที่เกี่ยวข้อง ฉันจำชื่อปลั๊กอินไม่ได้ ... อะไรก็ตามความคิดเห็นของฉันคือควรอ่านเอกสารก่อนถาม ซึ่งคุณทำ นั่นก็เท่ห์ แต่ขั้นตอนที่สองตรรกะหลังจากอ่านเอกสารจะเป็น IMO เพื่อดูที่มาของปลั๊กอินและดูว่ามีฟังก์ชั่นที่มีประโยชน์ ซึ่งคุณควรทำ แต่ AFAIK ผู้ลี้ภัยไม่ได้จัดการgit checkoutอะไรเลยดังนั้นโอกาสของคุณจะผอม :!git checkout -- filenameคุณอาจจะต้องถอยกลับไป
romainl

ตกลงขอบคุณสำหรับคำชี้แจง ฉันคิดว่าคุณสร้างจุดที่ถูกต้องเกี่ยวกับการดูซอร์สโค้ด แต่ในเวลาเดียวกันหากข้อมูลนั้นมีอยู่ในซอร์สโค้ดก็อาจเป็น QA ที่ถูกต้องที่นี่ จะยอมรับคำตอบของคุณและใช้งานต่อ:Git checkout -- %ไป
tidbeck

0

แม้ว่ามันจะไม่เกี่ยวข้องกับเสียงเรียกเข้า แต่ก็คิดจะบอกคุณว่าบางครั้งฉันก็ทำ:

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

จบงานได้อย่างรวดเร็ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.