วิธีลบไฟล์ในเครื่อง (ไม่ได้ติดตาม) ออกจากแผนผังการทำงาน Git ปัจจุบัน


6839

คุณจะลบไฟล์ในเครื่องที่ไม่ได้ติดตามได้จากแผนผังการทำงานปัจจุบันของคุณได้อย่างไร


86
แผ่นชีท git แบบโต้ตอบนี้ndpsoftware.com/git-cheatsheet.htmlแสดงพื้นที่ทำงาน git (google ให้ผลลัพธ์ที่ดีขึ้นด้วย "พื้นที่ทำงาน" มากกว่า "สำเนาทำงาน")
qneill

28
หมายเหตุ: ถ้าคุณต้องการที่จะลบบางไฟล์ที่ไม่ได้ติดตาม แต่ไม่ทั้งหมดของพวกเขา , git cleanมีตอนนี้โต้ตอบโหมด! ดูคำตอบของฉันสำหรับคำถามอื่น ๆ นี้ : git 1.8.4+
VonC

17
โปรดทราบว่าคุณไม่ได้ลบไฟล์จากสาขา git เนื่องจาก branch เป็นการอ้างอิงถึงการคอมมิทดังนั้นจึงไม่มีไฟล์ที่ไม่ได้ติดตาม สิ่งเหล่านี้มีอยู่ในไดเรกทอรีการทำงานเท่านั้นและไม่มีส่วนเกี่ยวข้องกับสาขา นั่นอาจเป็นเพียงแค่คำจำกัดความของคำศัพท์
Pavel Šimerda

6
เพื่อชี้แจงความเข้าใจเกี่ยวกับมือใหม่และสถานะใหม่ของ Git - run git และถ้ามันแสดงไฟล์ว่าไม่ได้ติดตามและคุณไม่ต้องการไฟล์นั้นใน repo คุณสามารถไปที่ระบบไฟล์ของคุณและลบหรือย้าย . สิ่งนี้จะไม่ทำอะไรที่เลวร้ายกับ repo ในพื้นที่ของคุณหรือ Git นอกจากนี้คุณยังสามารถใช้git cleanหรือรูปแบบบางอย่างในคำตอบด้านล่างรวมถึงเวอร์ชันแบบโต้ตอบเพื่อลบไฟล์ที่เลือกได้ แต่โหมดการโต้ตอบอาจน่าเบื่อ ตรวจสอบให้แน่ใจว่าคุณเข้าใจในสิ่งที่git cleanจะลบหรือใช้--dry-runเพื่อแจ้งให้คุณทราบโดยไม่ลบอะไรเลย
LightCC

4
หากไฟล์ยังไม่ถูกติดตามคุณจะไม่สามารถลบไฟล์เหล่านั้นโดยไม่ต้องคอมไพล์ได้หรือไม่? rm files-to-be-deleted
mhatch

คำตอบ:


8731

git-clean - ลบไฟล์ที่ไม่ได้ติดตามจากแผนผังการทำงาน

สรุป

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​

ลักษณะ

ทำความสะอาดต้นทำงานโดยซ้ำลบไฟล์ที่ไม่ได้อยู่ภายใต้การควบคุมเวอร์ชันเริ่มต้นจากไดเรกทอรีปัจจุบัน

โดยปกติไฟล์ที่ไม่รู้จัก Git เท่านั้นที่จะถูกลบ แต่ถ้าระบุ-xตัวเลือกไฟล์ที่ถูกละเว้นจะถูกลบด้วย เช่นนี้สามารถเป็นประโยชน์ในการลบผลิตภัณฑ์สร้างทั้งหมด

หาก<path>...มีการกำหนดอาร์กิวเมนต์ตัวเลือกใด ๆจะมีผลเฉพาะพา ธ เหล่านั้น


ขั้นตอนที่ 1 คือการแสดงสิ่งที่จะถูกลบโดยใช้-nตัวเลือก:

# Print out the list of files which will be removed (dry run)
git clean -n

Clean Step - ระวัง: สิ่งนี้จะลบไฟล์ :

# Delete the files from the repository
git clean -f
  • หากต้องการลบไดเรกทอรีให้เรียกใช้git clean -f -dหรือgit clean -fd
  • ในการลบไฟล์ที่ไม่สนใจให้รันgit clean -f -Xหรือgit clean -fX
  • ในการลบไฟล์ที่ถูกเพิกเฉยและไม่สนใจให้รันgit clean -f -xหรือgit clean -fx

สังเกตความแตกต่างของตัวพิมพ์เล็กXสำหรับคำสั่งหลังสองคำสั่ง

หากclean.requireForceตั้งค่าเป็น "true" (ค่าเริ่มต้น) ในการกำหนดค่าของคุณหนึ่งต้องระบุ-fมิฉะนั้นจะไม่มีอะไรเกิดขึ้นจริง

ดูgit-cleanเอกสารอีกครั้งสำหรับข้อมูลเพิ่มเติม


ตัวเลือก

-f, --force

ถ้า Git ตัวแปรกำหนดค่า clean.requireForce ไม่ได้ตั้งค่าเป็นเท็จคอมไพล์ทำความสะอาดจะปฏิเสธที่จะทำงานเว้นแต่ได้รับ-f, หรือ-n-i

-x

อย่าใช้กฎการเพิกเฉยมาตรฐานที่อ่านจาก. gitignore (ต่อไดเรกทอรี) และ$GIT_DIR/info/excludeแต่ยังคงใช้กฎการเพิกเฉยที่ให้มาพร้อมกับ-eตัวเลือก วิธีนี้ช่วยให้ลบไฟล์ที่ไม่ได้ติดตามทั้งหมดรวมถึงผลิตภัณฑ์บิลด์ สามารถใช้ (อาจร่วมกับการรีเซ็ต git) เพื่อสร้างไดเรกทอรีการทำงานที่เก่าแก่เพื่อทดสอบการสร้างที่สะอาด

-X

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

-n, --dry-run

อย่าลบอะไรจริงๆเพียงแค่แสดงสิ่งที่จะทำ

-d

ลบไดเรกทอรีที่ไม่ได้ติดตามนอกจากไฟล์ที่ไม่ได้ติดตาม หากไดเรกทอรีที่ไม่ได้ติดตามได้รับการจัดการโดยที่เก็บ Git อื่นมันจะไม่ถูกลบโดยค่าเริ่มต้น ใช้-fตัวเลือกสองครั้งหากคุณต้องการลบไดเรกทอรีดังกล่าว


288
git clean -fทำงานเฉพาะในไดเรกทอรีที่เรียกว่า (และไดเรกทอรีย่อย) หากคุณต้องการทำความสะอาดสำเนาการทำงานทั้งหมดคุณควรเรียกมันว่าในไดเรกทอรีราก
Eduardo Bezerra

17
นอกจากนี้ยังเป็นการลบไฟล์ทั้งหมดใน. gitignore ฉันต้องลบเฉพาะไฟล์ / โฟลเดอร์ที่ใหม่และไม่อยู่ใน. gitignore
Kostanos

24
@Kostanos หากคุณไม่ต้องการลบไฟล์ที่อยู่ใน. gitignore ให้ระบุแฟล็ก -x
Lo-Tan

52
git clean -f :/ทำงานราวกับว่าคุณได้ทำงานในราก repo dir โปรดดูคำตอบในภายหลังด้วยเช่นกันสำหรับการเข้าร่วม submodules ด้วยgit clean -ffxd :/
ที่นี่

18
@ มิเชลคอมไพล์สะอาด -xfd จะลบไฟล์ทั้งหมดในปัจจุบันที่ถูกละเว้นใน. gitignore ของคุณและพวกเขาจะไม่สามารถกู้คืนได้
thedanotto

986

ใช้git clean -f -dเพื่อให้แน่ใจว่าไดเรกทอรีจะถูกลบด้วย

  1. อย่าลบอะไรจริงๆเพียงแค่แสดงสิ่งที่จะทำ

    git clean -n
    

    หรือ

    git clean --dry-run
    
  2. ลบไดเรกทอรีที่ไม่ได้ติดตามซึ่งนอกเหนือจากไฟล์ที่ไม่ได้ติดตาม หากไดเรกทอรีที่ไม่ได้ติดตามได้รับการจัดการโดยที่เก็บ Git อื่นมันจะไม่ถูกลบโดยค่าเริ่มต้น ใช้-fตัวเลือกสองครั้งหากคุณต้องการลบไดเรกทอรีดังกล่าวจริงๆ

    git clean -fd
    

จากนั้นคุณสามารถตรวจสอบว่าไฟล์ของคุณหายไปgit statusหรือไม่


115
ตามที่ระบุไว้ก่อนหน้านี้ดีที่จะแห้งด้วยgit clean -n -d
Ms01

15
สิ่งที่เหมือนกันคือการทำและgit clean -nd git clean -fd
Micer

478

ฉันประหลาดใจที่ไม่มีใครพูดถึงเรื่องนี้มาก่อน:

git clean -i

นั่นหมายถึงการโต้ตอบและคุณจะได้รับภาพรวมอย่างรวดเร็วของสิ่งที่จะถูกลบให้คุณมีความเป็นไปได้ที่จะรวม / แยกไฟล์ที่ได้รับผลกระทบ โดยรวมยังเร็วกว่าการบังคับใช้--dry-runก่อนการทำความสะอาดจริง

คุณจะต้องโยน-dถ้าคุณต้องการดูแลโฟลเดอร์ว่าง ในตอนท้ายมันทำให้นามแฝงที่ดี:

git iclean

อย่างที่กล่าวไปแล้วการจับคำสั่งแบบอินเตอร์แอคทีฟพิเศษอาจทำให้ผู้ใช้ที่มีประสบการณ์เบื่อหน่าย วันนี้ฉันแค่ใช้สิ่งที่กล่าวมาแล้วgit clean -fd


16
@ pal4life มันถูกเพิ่มเข้าไปใน 1.8.4 คุณอาจกำลังใช้งานคอมไพล์รุ่นเก่ากว่าหรือไม่? github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.txt
Mattias Backman

ฉันชอบสิ่งนี้ - ฉันรู้สึกสะดวกสบายมากกว่าที่มีในประวัติทุบตีของฉันมากกว่าตัวเลือกอื่น ๆ เพราะมันไม่ใช่เรื่องใหญ่หากฉันเผลอ ctrl-r หรือ ctrl-p ไปโดยบังเอิญ
csvoss

เป็นไปได้git clean -iไหมถ้ามันถูกเรียกจากรูทของสำเนาการทำงาน?
Alessandro Jacopson


250

หากไดเรกทอรีที่ไม่ได้ติดตามเป็นที่เก็บข้อมูลคอมไพล์ของมันเอง (เช่น submodule) คุณต้องใช้-fสองครั้ง:

git clean -d -f -f


4
BTW นี้จะถูกเขียนในเอกสาร : Git จะปฏิเสธที่จะลบไดเรกทอรีที่มีไดเรกทอรีย่อยหรือไฟล์. git เว้นแต่จะได้รับ -f ตัวที่สอง แต่ขอบคุณล่ะ!
Maxim Suslov

248

วิธีง่ายๆในการลบไฟล์ที่ไม่ได้ติดตาม

ในการลบไฟล์ที่ไม่ได้ติดตามทั้งหมดวิธีที่ง่ายคือการเพิ่มไฟล์ทั้งหมดก่อนและรีเซ็ต repoดังนี้

git add --all
git reset --hard HEAD


8
คุณสามารถแทนที่โดยgit add --all git add .ดังนั้นคุณสามารถทำมันในทางที่สั้นกว่าใน Oneline git add . && git reset --hard HEAD (ไม่ว่าจะมากระวังด้วยคำสั่งนี้)
RousseauAlexandre

22
ทำไมต้องใช้สิ่งนี้มากกว่าgit clean?
2864740

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

5
@ แล้วมันจะไม่ลบไฟล์ที่ถูกข้ามสำหรับฉัน (git 2.14.1) คุณควรเรียกใช้git clean -nก่อนที่จะทำการลบจริง (หรือใช้git clean -i)
Qw3ry

8
git cleanลบไฟล์ที่ถูกละเว้นเฉพาะในกรณีที่คุณใช้ตัวเลือก-xหรือ-Xไม่เช่นนั้นจะเป็นการลบไฟล์ที่ไม่ได้ติดตาม
doubleDown

140

ผมชอบเพราะคุณสามารถยกเลิกการให้พวกเขาทั้งหมดที่มีgit stash push -ugit stash pop

แก้ไข: นอกจากนี้ฉันยังพบวิธีแสดงไฟล์ที่ไม่ได้ติดตามในที่ซ่อน (เช่นgit show stash@{0}^3) https://stackoverflow.com/a/12681856/338986

EDIT2: เลิกในความโปรดปรานของgit stash save pushขอบคุณ @ script-wolf


3
คุณสามารถอธิบาย -u บนที่ซ่อนได้หรือไม่? ฉันไม่ปฏิบัติตามวิธีการใช้งานที่แตกต่างจาก git stash save ฉันลองมันแล้วมันใช้งานได้ ดู git docs และไม่พบที่นั่น
Winnemucca

9
-u--include-untrackedเทียบเท่ากับ git help stashคุณสามารถค้นหาความช่วยเหลือเกี่ยวกับ
hiroshi

3
@hiroshi ขอบคุณ! หลังจากลองใช้วิธีแก้ปัญหายี้จากคนที่แตกต่างกันหลายสิบคนนี่คือสิ่งที่ทำงานได้ในที่สุด ... ว้าว! แม้แต่ที่เก็บคอมไพล์ก็ยังมีนาดาอยู่ คุณประหยัดคนดูแลที่ไม่ได้ติดตาม รีเซ็ตแรงยาก / แรงสะอาด / ฯลฯ สิ่งเหล่านี้ไม่ได้ทำเพื่อฉัน
killjoy

3
saveตัวเลือกที่ได้รับการยกเลิกในความโปรดปรานของpushซึ่งไม่เหมือนกัน แต่ไม่มาก คุณสามารถอ่านเพิ่มเติมได้ที่นี่/programming/44680028/whats-the-difference-between-git-stash-save-and-git-stash-push/44681952
สคริปต์ Wolf

120

นี่คือสิ่งที่ฉันมักจะใช้:

git clean -fdx

สำหรับโครงการขนาดใหญ่มากคุณอาจต้องการเรียกใช้สองสามครั้ง


@ มาร์ตินหนึ่งในโครงการที่ฉันกำลังทำอยู่คือ +8 ปีกับผู้พัฒนากว่า 80 คนกำลังเข้ารหัส Git บางครั้งล้มเหลวในการทำความสะอาดในครั้งแรก
Oscar Fraxedas

1
ฉันสามารถยืนยันได้ดังนั้นจึงยังคงใช้ได้ในปี 2563 เรากำลังทำงานในโครงการขนาดใหญ่และฉันต้องใช้งาน 4-5 ครั้งจนกว่า GIT จะไม่พบไฟล์ที่จะลบอีกต่อไป
turbolocust

90

git-cleanคือสิ่งที่คุณกำลังมองหา มันถูกใช้เพื่อลบไฟล์ที่ไม่ได้ติดตามจากแผนผังการทำงาน


86

หากจำเป็นต้องลบไฟล์ที่ไม่ได้ติดตามจากไดเรกทอรีย่อยโดยเฉพาะ

git clean -f {dir_path}

และรวมวิธีการลบไฟล์ / ไฟล์ที่ไม่ได้ติดตามและไม่ได้ติดตาม

git clean -fxd {dir_path}

git statusหลังจากนี้คุณจะได้แก้ไขไฟล์เฉพาะใน


68

ลบโฟลเดอร์และไฟล์พิเศษทั้งหมดใน repo + submodules นี้

สิ่งนี้ทำให้คุณอยู่ในสภาพเดียวกับการโคลนนิ่งสด

git clean -ffdx

ลบโฟลเดอร์และไฟล์พิเศษทั้งหมดใน repo นี้ แต่ไม่ใช่ submodules

git clean -fdx

ลบโฟลเดอร์พิเศษ แต่ไม่ใช่ไฟล์ (เช่นสร้างหรือบันทึกโฟลเดอร์)

git clean -fd

ลบโฟลเดอร์พิเศษ + ไฟล์ที่ถูกละเว้น (แต่ไม่ใช่ไฟล์ที่เพิ่งเพิ่มใหม่)

หากไฟล์นั้นไม่ถูกเพิกเฉยและยังไม่ได้ทำการเช็คอินก็จะยังคงอยู่ สังเกตเมืองหลวง X

git clean -fdX

โหมดการโต้ตอบใหม่

git clean

57

git clean -fd ลบไดเรกทอรี

git clean -fX ลบไฟล์ที่ถูกละเว้น

git clean -fx ลบไฟล์ที่ถูกละเว้นและไม่สนใจ

สามารถใช้ตัวเลือกทั้งหมดข้างต้นรวมกันเป็น

git clean -fdXx

ตรวจสอบคู่มือ git เพื่อขอความช่วยเหลือเพิ่มเติม


10
คำสั่งgit clean -fdXxสร้างข้อความแสดงข้อผิดพลาด"fatal: -x และ -X ไม่สามารถใช้ร่วมกันได้" (ใช้ git-2.8) สำหรับประโยคสุดท้ายของคุณในคำตอบโปรดระบุลิงก์ไปยังคู่มือ git ไชโย
โอลิเบอร์

เรียกใช้สองคำสั่งตามลำดับ: git clean -fdX, git clean -fdx
นาฬิกา ZHONG

55

ตกลงการลบไฟล์และโฟลเดอร์ที่ไม่ได้ติดตามที่ไม่ต้องการนั้นใช้งานง่ายgitในบรรทัดคำสั่งเพียงทำดังนี้:

git clean -fd

ตรวจสอบอีกครั้งก่อนที่จะทำเพราะมันจะลบไฟล์และโฟลเดอร์โดยไม่สร้างประวัติ ...

นอกจากนี้ในกรณีนี้-fย่อมาจากแรงและ-dหมายถึงไดเรกทอรี ...

ดังนั้นหากคุณต้องการลบไฟล์เท่านั้นคุณสามารถ-fใช้ได้เฉพาะ:

git clean -f

ถ้าคุณต้องการ ลบ (ไดเรกทอรี) และไฟล์คุณสามารถลบเฉพาะไดเรกทอรีและไฟล์ที่ไม่ได้ติดตามดังนี้:

git clean -fd

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

และเพิ่มการ-iตั้งค่าสถานะทำให้คอมไพล์ขออนุญาตจากคุณสำหรับการลบไฟล์ทีละคนในระหว่างการเดินทาง

หากคุณไม่แน่ใจและต้องการตรวจสอบสิ่งต่างๆก่อนให้เพิ่ม -nตั้งค่าสถานะ

ใช้ -qหากคุณไม่ต้องการเห็นรายงานใด ๆ หลังจากการลบสำเร็จ

ฉันยังสร้างภาพด้านล่างเพื่อให้น่าจดจำยิ่งขึ้นโดยเฉพาะฉันได้เห็นหลายคนสับสน-fในการทำความสะอาดโฟลเดอร์บางครั้งหรือผสมมันอย่างใด!


การลบไฟล์และโฟลเดอร์ที่ไม่ได้ติดตามที่ไม่ต้องการ


ภาพนั้นคืออะไร
Pacerier

37

วิธีที่ดีกว่าคือการใช้: ทำความสะอาดคอมไพล์

git clean -d -x -f

นี้จะเอาไฟล์ที่ไม่ได้ติดตามรวมทั้งไดเรกทอรีและไฟล์โดยไม่สนใจ(-d)git (-x)

นอกจากนี้แทนที่-fอาร์กิวเมนต์ด้วย-nเพื่อดำเนินการdry-runหรือ-iสำหรับโหมดโต้ตอบและมันจะบอกคุณว่าจะถูกลบออก


25

วิธีการโต้ตอบของผู้ใช้:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y

-i สำหรับการโต้ตอบ
-f สำหรับ force
-d สำหรับไดเรกทอรี
-x สำหรับไฟล์ที่ถูกละเว้น (เพิ่มถ้าจำเป็น)

หมายเหตุ: เพิ่ม-nหรือ--dry-runเพื่อตรวจสอบสิ่งที่จะทำ


20

lifehack สำหรับสถานการณ์เช่นนี้ฉันเพิ่งคิดค้นและพยายาม (ที่ทำงานได้สมบูรณ์):

git add .
git reset --hard HEAD

ระวัง! ให้แน่ใจว่าได้กระทำการเปลี่ยนแปลงใด ๆ ที่จำเป็น (แม้ในไฟล์ที่ไม่ที่ไม่ได้ติดตาม) ก่อนดำเนินการนี้


3
อย่างน้อยนี่เป็นแนวทางที่แตกต่าง :) อีกวิธีหนึ่งที่จะจำไฟล์ที่ถูกลบใน reflog แต่ไม่ได้อยู่ในสาขาใด ๆ จะเป็น:git add . git commit -m 'about to delete' git reset --hard HEAD~
joeytwiddle

2
วิธีที่รวดเร็วยิ่งขึ้นคือgit add . && git reset --hard HEAD
thybzi

3
git add . && git reset --hard
Pleymor

นี่อาจไม่ใช่สิ่งที่คุณต้องการหากมีการเปลี่ยนแปลงที่คุณต้องการกระทำ
lacostenycoder

@AlexanderMills git reset --hardรีเซ็ตการเปลี่ยนแปลงที่ไม่ได้รับการตอบรับทั้งหมด แต่ไฟล์ที่ไม่ได้ถูกบีบอัดกลับสู่สถานะการคอมมิทล่าสุด นั่นคือเหตุผลที่เราต้องการเป็นอันดับแรกgit add .- ซึ่งจะทำการสำรองไฟล์ที่ไม่ได้ติดตามทั้งหมด (ดังนั้นจึงถูกรีเซ็ตเช่นกัน)
thybzi

19

git clean -f -d -x $(git rev-parse --show-cdup)ใช้ clean กับไดเร็กทอรี root ไม่ว่าคุณจะเรียกมันว่าอะไรในแผนผังไดเร็กทอรี repository ฉันใช้มันตลอดเวลาเพราะมันไม่ได้บังคับให้คุณออกจากโฟลเดอร์ที่คุณทำงานอยู่ตอนนี้และอนุญาตให้ทำความสะอาดและกระทำได้ทันทีจากที่ที่คุณอยู่

ให้แน่ใจว่าธง-f, -d, -xตรงกับความต้องการของคุณ:

-d
       Remove untracked directories in addition to untracked files. If an
       untracked directory is managed by a different Git repository, it is
       not removed by default. Use -f option twice if you really want to
       remove such a directory.

-f, --force
       If the Git configuration variable clean.requireForce is not set to
       false, git clean will refuse to delete files or directories unless
       given -f, -n or -i. Git will refuse to delete directories with .git
       sub directory or file unless a second -f is given. This affects
       also git submodules where the storage area of the removed submodule
       under .git/modules/ is not removed until -f is given twice.

-x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

มีธงอื่น ๆ git clean --helpเท่าที่มีดีเพียงการตรวจสอบอยู่


BTW คุณสามารถทำความสะอาดคอมไพล์ {ค่าสถานะ}: / ดังนั้นมันจะเหมือนกับว่าคุณรันคำสั่งใน repo root
The-null-Pointer-

19

สำหรับฉันทำงานต่อไปนี้เท่านั้น:

git clean -ffdx

ในกรณีอื่น ๆ ฉันได้รับข้อความ"ข้ามไดเรกทอรี"สำหรับไดเรกทอรีย่อยบางแห่ง


2
ขอบคุณ ฉันออกไป-xและใช้git clean -ffdเพื่อหลีกเลี่ยงการลบไฟล์ใน. gitignore
Feckmore

15

หากคุณเพียงแค่ต้องการลบไฟล์ที่ระบุว่าไม่ได้ติดตามโดย 'สถานะ git'

git stash save -u
git stash drop "stash@{0}"

ฉันชอบที่จะ 'git clean' เพราะ 'git clean' จะลบไฟล์ที่ถูกละเว้นโดย git ดังนั้นบิลด์ถัดไปของคุณจะต้องสร้างใหม่ทุกอย่างและคุณอาจสูญเสียการตั้งค่า IDE ของคุณด้วย


3
นี่จะเป็นการลบการเปลี่ยนแปลงที่ถูกต้องไปยังไฟล์ที่ถูกติดตาม ฉันจะไม่แนะนำที่นี่
code_dredd

2
ใช่คุณต้องยอมรับการเปลี่ยนแปลงกับไฟล์ที่ถูกติดตามก่อน
jazzdev

14

หากต้องการทราบว่าจะลบอะไรก่อนที่จะลบจริง:

git clean -d -n

มันจะออกผลลัพธ์ที่ชอบ:

จะลบ sample.txt

หากต้องการลบทุกอย่างที่แสดงในผลลัพธ์ของคำสั่งก่อนหน้า:

git clean -d -f

มันจะออกผลลัพธ์ที่ชอบ:

ลบ sample.txt


11

ในการลบไฟล์ที่ไม่ได้ติดตามคุณควรใช้คำสั่งก่อนเพื่อดูไฟล์ที่จะได้รับผลกระทบจากการล้าง

git clean -fdn

นี่จะแสดงรายการไฟล์ที่จะถูกลบ ตอนนี้การลบไฟล์เหล่านั้นจริงๆใช้คำสั่งนี้:

git clean -fd

11

ระวังขณะรันคำสั่ง `git clean '

ใช้เสมอ -nก่อนที่จะเรียกใช้คำสั่งจริงเพราะมันจะแสดงไฟล์ที่จะถูกลบ

git clean -n -d 
git clean -f -d

โดยค่าเริ่มต้นgit cleanจะเป็นการลบไฟล์ที่ไม่ได้ติดตามซึ่งจะไม่ถูกเพิกเฉย ไฟล์ใด ๆ ที่ตรงกับรูปแบบใน. gitignore ของคุณหรือไฟล์ละเว้นอื่น ๆ จะไม่ถูกลบ หากคุณต้องการลบไฟล์เหล่านั้นด้วยคุณสามารถเพิ่ม-xคำสั่ง clean

git clean -f -d -x

นอกจากนี้ยังมีโหมดการโต้ตอบพร้อมใช้งาน-iกับคำสั่ง clean

git clean -x -i

อีกทางเลือกหนึ่ง

หากคุณไม่แน่ใจ 100% ว่าการลบงานที่ไม่ผูกมัดของคุณปลอดภัยคุณสามารถใช้การจัดเก็บแทน

git stash --all

นอกจากนี้ยังจะล้างไดเรกทอรีของคุณ แต่ให้ความยืดหยุ่นในการดึงไฟล์ในเวลาใดก็ได้โดยใช้stashกับApplyหรือป๊อปอัพ จากนั้นในเวลาต่อมาคุณสามารถล้างข้อมูลสะสมโดยใช้:

git stash drop // or clean

2
สะสมเป็นความคิดที่ดี แต่คุณอาจต้องการใช้git stash save and type some comment as to what this stash was for
lacostenycoder


9

คำสั่ง uggested สำหรับการลบไฟล์ที่ไม่ได้ติดตามจาก git docsเป็นgit clean

git clean - ลบไฟล์ที่ไม่ได้ติดตามจากแผนผังการทำงาน

วิธีการที่แนะนำ: โหมดการแทรกซึมโดยใช้git clean -i เพื่อให้เราสามารถควบคุมมันได้ ให้ดูตัวเลือกที่เหลืออยู่

ตัวเลือกที่มี:

git clean 
    -d -f -i -n -q -e -x -X (can use either)

คำอธิบาย:

1. -d

ลบไดเรกทอรีที่ไม่ได้ติดตามซึ่งนอกเหนือจากไฟล์ที่ไม่ได้ติดตาม หากไดเรกทอรีที่ไม่ได้ติดตามได้รับการจัดการโดยที่เก็บ Git อื่นมันจะไม่ถูกลบโดยค่าเริ่มต้น ใช้ตัวเลือก -f สองครั้งหากคุณต้องการลบไดเรกทอรีดังกล่าว

2. -f, --force

หากตัวแปรการกำหนดค่า Git clean.requireForce ไม่ได้ถูกตั้งค่าเป็นเท็จ git clean จะปฏิเสธที่จะทำงานเว้นแต่จะได้รับ -f, -n หรือ -i

3. -i, - โต้ตอบ

แสดงสิ่งที่ต้องทำและล้างไฟล์แบบโต้ตอบ ดู“ โหมดโต้ตอบ” สำหรับรายละเอียด

4. -n, - แห้งวิ่ง

อย่าลบอะไรจริงๆเพียงแค่แสดงสิ่งที่จะทำ

5. -q, - เงียบ

เงียบรายงานเฉพาะข้อผิดพลาด แต่ไม่ใช่ไฟล์ที่ถูกลบสำเร็จ

6. -e, - ไม่รวม =

นอกเหนือจากที่พบใน. gitignore (ต่อไดเรกทอรี) และ $ GIT_DIR / info / แยกยังพิจารณารูปแบบเหล่านี้ให้อยู่ในชุดของกฎการเพิกเฉยที่มีผล

7. -x

อย่าใช้กฎการเพิกเฉยมาตรฐานที่อ่านจาก. gitignore (ต่อไดเรกทอรี) และ $ GIT_DIR / info / แยก แต่ยังคงใช้กฎการเพิกเฉยที่ให้มาพร้อมกับตัวเลือก -e วิธีนี้ช่วยให้ลบไฟล์ที่ไม่ได้ติดตามทั้งหมดรวมถึงผลิตภัณฑ์บิลด์ สามารถใช้ (อาจเป็นร่วมกับการรีเซ็ต git) เพื่อสร้างไดเรกทอรีการทำงานที่เก่าแก่เพื่อทดสอบการสร้างที่สะอาด

8. -X

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


ฉันคิดว่าคุณมีการพิมพ์ผิดuggestedแต่นั่นเป็นเพียง " uggestionlol
lacostenycoder

8

ปกติคำสั่งไม่ลบไฟล์ที่ไม่ได้ติดตามกับฉันgit cleangit version 2.9.0.windows.1

$ git clean -fdx     # doesn't remove untracked files
$ git clean -fdx *   # Append star then it works!

7

เราสามารถลบไฟล์ที่ไม่ได้ติดตามในเครื่องได้อย่างง่ายดายจากแผนผังการทำงาน git ปัจจุบันโดยใช้ความเห็นด้านล่าง git

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

ตัวอย่าง:

git reset --hard HEAD

ลิงค์:

  1. https://git-scm.com/docs/git-reset
  2. ฉันจะใช้ 'การรีเซ็ต git - ฮาร์ด HEAD' เพื่อเปลี่ยนกลับเป็นการคอมมิชชันก่อนหน้าได้อย่างไร
  3. รีเซ็ตสาขาที่เก็บในตัวเครื่องให้เป็นเหมือนที่เก็บข้อมูลระยะไกล HEAD
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

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

ไม่ทำงาน: ออกจากไฟล์บางไฟล์ git clean -ffdxคือทางออก
Eugene Gr. Philippov

7

ล้างที่เก็บ git และ submodules ทั้งหมดแบบเรียกซ้ำ

คำสั่งต่อไปนี้จะทำความสะอาดที่เก็บ git ปัจจุบันและ submodules ทั้งหมดซ้ำ:

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)

ควรใช้ด้วยความระมัดระวังอย่างยิ่ง
lacostenycoder

6
git clean -f

จะลบไฟล์ที่ไม่ได้ติดตามจาก git ปัจจุบัน

git clean -fd

เมื่อคุณต้องการลบไดเรกทอรีและไฟล์สิ่งนี้จะลบเฉพาะไดเรกทอรีและไฟล์ที่ไม่ได้ติดตาม


5

oh-my-zshกับzshให้นามแฝงที่ยอดเยี่ยมเหล่านั้นผ่านปลั๊กอิน git พวกเขาสามารถใช้ในการทุบตีเช่นกัน

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • gclean เอาไดเรกทอรีที่ไม่ได้ติดตามนอกเหนือไปจากไฟล์ที่ไม่ได้ติดตาม
  • gpristineรีเซ็ตฮาร์ดการเปลี่ยนแปลงในเครื่องลบไดเรกทอรีที่ไม่ได้ติดตามติดตามไฟล์ที่ไม่ได้ติดตามและไม่ใช้กฎการเพิกเฉยมาตรฐานที่อ่านจาก. gitignore (ต่อไดเรกทอรี) และ $ GIT_DIR / ข้อมูล / แยกออก แต่ยังคงใช้กฎการเพิกเฉยที่ได้รับ วิธีนี้ช่วยให้ลบไฟล์ที่ไม่ได้ติดตามทั้งหมดรวมถึงผลิตภัณฑ์บิลด์ นี้สามารถใช้ (อาจร่วมกับการตั้งค่าคอมไพล์) เพื่อสร้างที่เก่าแก่ไดเรกทอรีการทำงานเพื่อทดสอบการทำความสะอาดสร้าง

2
ขอบคุณสำหรับคำติชมของคุณคำสั่งของฉันสับสน ฉันอยากจะบอกว่านามแฝงที่ไฮไลต์มาโดยอัตโนมัติด้วย oh-my-zsh เห็นได้ชัดว่าพวกเขาทำงานได้ดีbashมาก ฉันแก้ไขคำตอบของฉันเพื่อสะท้อนว่า
ZenLulz

4

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

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