รีเซ็ตการเปลี่ยนแปลงทั้งหมดหลังจากคอมมิทครั้งสุดท้ายในคอมไพล์


324

ฉันจะยกเลิกทุกการเปลี่ยนแปลงที่เกิดขึ้นกับไดเรกทอรีของฉันหลังจากที่ล่าสุดกระทำรวมถึงการลบไฟล์เพิ่มการรีเซ็ตการแก้ไขไฟล์และบวกกลับไฟล์ที่ถูกลบ?


การทำซ้ำที่เป็นไปได้ของการแปลงกลับเป็น Git ก่อนหน้านี้
nawfal

8
@nawfal อาจซ้ำกัน แต่ 'รีเซ็ตการเปลี่ยนแปลงทั้งหมดหลังจากการกระทำครั้งสุดท้าย' ตรงกับเกณฑ์การค้นหาเพิ่มเติม (คำที่ค้นหาใน Google) มากกว่าคำว่า 'วิธีการเปลี่ยนที่เก็บ git' ที่สอดคล้องกัน อย่างน้อยสำหรับคนอย่างฉันที่ไม่มีภาษาอังกฤษเป็นภาษาแม่: d
Shirish Herwade

คำตอบ:


561

รีเซ็ตการเปลี่ยนแปลงก่อน

git reset HEAD --hard

จากนั้นทำความสะอาดทุกอย่างที่ไม่ได้ติดตาม หากคุณต้องการเก็บไฟล์ที่ไม่ถูกติดตามอยู่ให้.gitignoreระวังด้วยคำสั่งนี้

git clean -fd

7
@Adam: บางครั้งคุณอาจต้องการ-xตัวเลือกgit cleanเช่นกันซึ่งนำไปสู่การลบไฟล์ที่ถูกละเว้นเช่นกัน
Cascabel

31
หากคุณต้องการเก็บไฟล์ที่ไม่ได้ติดตามเนื่องจาก. gitignore ให้ระวังด้วยgit clean -fdคำสั่ง
bitsoflogic

3
@Levinaris: เป็นอีกวิธีหนึ่งที่git clean -fdจะไม่ลบไฟล์ที่ถูกละเว้น -xจะ.
Robert Siemer

5
@RobertSiemer จริงๆแล้วมันสามารถ! หากคุณมีโฟลเดอร์ใด ๆ ที่ประกอบด้วยไฟล์ที่ถูกละเว้นทั้งหมดมันจะลบโฟลเดอร์เหล่านั้นดังนั้นการลบไฟล์ที่ถูกละเว้น พิจารณาไฟล์ .gitignore อย่างหนึ่งที่นี่: stackoverflow.com/q/25554504/456645 ในตัวอย่างนี้สมมติว่าบางโฟลเดอร์ไม่มีไฟล์ PHP git clean -fdจะลบโฟลเดอร์เหล่านั้นและไฟล์ที่ไม่ได้ติดตาม ทดสอบกับ git เวอร์ชั่น 1.9.1
bitsoflogic

3
แต่ทำไมการทำความสะอาดครั้งที่สองจึงเป็นสิ่งจำเป็น?
Shirish Herwade

71

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

  1. คุณสามารถยกเลิกการเปลี่ยนแปลงไฟล์ที่ติดตามด้วย:

    git reset HEAD --hard
    
  2. คุณสามารถลบไฟล์ที่ไม่ได้ติดตามได้ด้วย:

    git clean -f
    
  3. คุณสามารถลบไฟล์และไดเรกทอรีที่ไม่ได้ติดตามได้ด้วย:

    git clean -fd
    

    แต่คุณไม่สามารถเลิกทำการเปลี่ยนแปลงไฟล์ที่ไม่ได้ติดตามได้

  4. คุณสามารถลบไฟล์และไดเรกทอรีที่ถูกละเว้นและไม่ได้ติดตามได้

    git clean -fdx
    

    แต่คุณไม่สามารถเลิกทำการเปลี่ยนแปลงไฟล์ที่ถูกละเว้นได้

คุณสามารถตั้งค่าclean.requireForceเป็นfalse:

git config --global --add clean.requireForce false

หลีกเลี่ยงการใช้-f( --force) git cleanเมื่อคุณใช้


2
ยอดเยี่ยมสิ่งที่ฉันต้องการ ขอบคุณสำหรับการเปรียบเทียบคำสั่งที่เกี่ยวข้องทั้งหมด!
Marquee

-1

มีสองคำสั่งที่จะทำงานในสถานการณ์นี้

root> git reset - ฮาร์ดหัว ~ 1

รูท> git push -f

สำหรับคำสั่ง git เพิ่มเติมดูหน้านี้


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