git ชำระเงินไฟล์ทั้งหมด


127

ฉันจะกำจัดการเปลี่ยนแปลงทั้งหมดในไฟล์ทั้งหมดในที่เก็บของฉันได้อย่างไร

สมมติว่าฉันอยู่ในสาขาและได้ทำการเปลี่ยนแปลงบางอย่าง git statusส่งคืนชุดไฟล์ในส่วน "การเปลี่ยนแปลงที่ไม่จัดฉากสำหรับการกระทำ" และฉันสังเกตเห็นว่าฉันต้องการกำจัดการเปลี่ยนแปลงทั้งหมดนี้ในไฟล์ทั้งหมด ฉันจะทำสิ่งนี้ด้วยคำสั่งเดียวได้อย่างไร?

ฉันรู้ว่าฉันสามารถทำสิ่งต่อไปนี้เพื่อชำระเงินเพียงไฟล์เดียว:

git checkout -- <file>

ฉันสังเกตเห็นว่าgit checkout --เพียงอย่างเดียวส่งคืนรายการไฟล์ที่ไม่ได้รับคำสั่งทั้งหมด git checkout --allแต่ผมไม่สามารถหาวิธีการชำระเงินทั้งหมดของพวกเขาบางอย่างเช่น

ฉันตรวจสอบman git checkoutแล้วไม่พบอะไร นอกจากนี้ฉันเห็นGit: ชำระเงินทุกไฟล์ยกเว้นไฟล์เดียวและลองgit checkout .แล้วก็ไม่ได้ผลเช่นกัน

ฉันจะต้องทำแบบเป็นโปรแกรมโดยการวนลูปผ่านgit checkout --เอาต์พุตหรือไม่?

คำตอบ:


194

หากคุณอยู่ที่รากของไดเร็กทอรีการทำงานของคุณคุณสามารถgit checkout -- .ตรวจสอบไฟล์ทั้งหมดใน HEAD ปัจจุบันและแทนที่ไฟล์ในเครื่องของคุณ

คุณยังสามารถgit reset --hardรีเซ็ตไดเร็กทอรีการทำงานของคุณและแทนที่การเปลี่ยนแปลงทั้งหมด (รวมถึงดัชนี)


สองตัวเลือกเทียบเท่ากันหรือไม่ (ถ้าเรารีเซ็ตเป็น HEAD)
lucidbrot

10
ไม่มีความแตกต่างแน่นอน ตัวอย่างเช่นgit checkout -- .จะรีเซ็ตการเปลี่ยนแปลงสถานะของดัชนีเท่านั้น ดังนั้นหากคุณได้เพิ่มไฟล์ลงในดัชนีแล้วนั่นคือสิ่งที่จะรีเซ็ตเป็น ในทางกลับกันgit reset --hardจะทิ้งดัชนีไปด้วยเช่นกันตัวอย่างเช่นหากคุณเพิ่มไฟล์ที่ไม่ได้ติดตามลงในดัชนี (เพื่อเริ่มการติดตาม) ไฟล์เหล่านั้นจะถูกลบออกไปด้วย git checkoutยังช่วยให้คุณสามารถกู้คืนไดเร็กทอรีการทำงานได้เพียงบางส่วนโดยส่งผ่านพา ธ ที่เฉพาะเจาะจงมากขึ้นซึ่งจะมีประโยชน์มาก
โผล่


4
@poke สวัสดี Poke ฉันแน่ใจว่า git ชำระเงิน -. ไม่ทำงาน ฉันลองใช้สำหรับการเปลี่ยนแปลงหลายรายการที่ไม่มีขั้นตอน
Aman

2
คำสั่งอื่น ๆ เพื่อให้ได้ผลลัพธ์เดียวกัน: git checkout --force,git reset --hard
tjalling

3

วิธีอื่นที่ฉันพบว่ามีประโยชน์คือ:

git checkout <wildcard> 

ตัวอย่าง:

git checkout *.html

ให้เป็นปกติมากกว่านี้:

git checkout <branch> <filename/wildcard>

1
หากเปิดใช้งาน globbing บนเชลล์ของคุณและมีไฟล์ที่ไม่ถูกติดตามในไดเร็กทอรีการทำงานการดำเนินการนี้จะล้มเหลวเว้นแต่คุณจะหนีเครื่องหมายดอกจันเช่นgit checkout \*หรือgit checkout '*'.
Josh Cooley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.