วิธีลบการเปลี่ยนแปลงทั้งหมดจากไดเรกทอรีการทำงานรวมถึงไฟล์ที่ไม่ได้ติดตามใหม่ ฉันรู้ว่าgit checkout -f
ทำอย่างนั้น แต่จะไม่ลบไฟล์ที่ไม่ได้ติดตามใหม่ที่สร้างขึ้นตั้งแต่การส่งครั้งล่าสุด
ใครบ้างมีความคิดในการทำเช่นนั้น?
วิธีลบการเปลี่ยนแปลงทั้งหมดจากไดเรกทอรีการทำงานรวมถึงไฟล์ที่ไม่ได้ติดตามใหม่ ฉันรู้ว่าgit checkout -f
ทำอย่างนั้น แต่จะไม่ลบไฟล์ที่ไม่ได้ติดตามใหม่ที่สร้างขึ้นตั้งแต่การส่งครั้งล่าสุด
ใครบ้างมีความคิดในการทำเช่นนั้น?
คำตอบ:
git reset --hard # removes staged and working directory changes
## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)
หากต้องการดูสิ่งที่จะถูกลบก่อนมือโดยไม่ต้องลบออกให้ใช้การ-n
ตั้งค่าสถานะ (นี่คือการทดสอบรัน) เมื่อคุณพร้อมที่จะลบจริงแล้วลบ-n
ธง:
git clean -nfd
git clean -fxd
อาจเป็นอันตรายได้ถ้าคุณไม่รู้ว่ากำลังทำอะไรอยู่ คุณอาจสิ้นสุดการลบไฟล์ที่ไม่ได้ติดตามที่สำคัญอย่างถาวรเช่นฐานข้อมูลของคุณ ฯลฯ ใช้ความระมัดระวัง
git clean -f -d
จะลบไฟล์จากโฟลเดอร์ที่ถูกข้ามด้วย ดังนั้นสิ่งที่คุณบันทึกในท้องถิ่นและสิ่งต่าง ๆ เช่นนั้นจะหายไป ปกติแล้วมันไม่ใช่ปัญหาใหญ่ แต่ควรรู้
วิธีที่ปลอดภัยที่สุดที่ฉันใช้บ่อย:
git clean -fd
คำอธิบายไวยากรณ์ตาม/docs/git-clean
หน้า:
-f
(นามแฝง: --force
) หากตัวแปรการกำหนดค่า Git clean.requireForce ไม่ได้ตั้งค่าเป็นเท็จ git clean จะปฏิเสธที่จะลบไฟล์หรือไดเรกทอรีเว้นแต่จะได้รับ -f, -n หรือ -i Git จะปฏิเสธที่จะลบไดเรกทอรีที่มีไดเรกทอรีย่อยหรือไฟล์. git เว้นแต่ว่าจะได้รับวินาที-d
. ลบไดเรกทอรีที่ไม่ได้ติดตามซึ่งนอกเหนือจากไฟล์ที่ไม่ได้ติดตาม หากไดเรกทอรีที่ไม่ได้ติดตามได้รับการจัดการโดยที่เก็บ Git อื่นมันจะไม่ถูกลบโดยค่าเริ่มต้น ใช้ตัวเลือก -f สองครั้งหากคุณต้องการลบไดเรกทอรีดังกล่าวตามที่ระบุไว้ในความคิดเห็นมันอาจจะดีกว่าที่จะทำ git clean -nd
ที่แห้งและบอกคุณว่าจะถูกลบก่อนที่จะลบจริง
ลิงก์ไปที่git clean
หน้าเอกสาร:
https://git-scm.com/docs/git-clean
git clean -nd .
จะลบไฟล์โดยใช้ก่อนเสมอgit clean -fd .
add -A
+ commit -a
+ ก่อนrevert head
git clean
การตรวจสอบการลบแต่ละครั้งก็ไม่ได้ปรับขนาดสำหรับสถานการณ์สำคัญ นอกจากนี้การวิ่งแบบแห้งไม่ใช่กระสุนเงิน: จะเป็นอย่างไรถ้าคุณพลาดบางสิ่งหรือทำผิดพลาดระหว่างการตรวจสอบ
สำหรับทุกunstagedไฟล์ใช้:
git checkout -- .
.
ที่สิ้นสุดเป็นสิ่งสำคัญ
คุณสามารถแทนที่.
ด้วยชื่อไดเรกทอรีย่อยเพื่อล้างเฉพาะไดเรกทอรีย่อยเฉพาะของโครงการของคุณ ปัญหาคือการแก้ไขเฉพาะที่นี่
src/app/work/filename.js
../app/working/test/filename.js
เพียงแค่ใช้git checkout -- .
ในสาขาเท่านั้นลบไฟล์แรก ( โดยไม่นำ .. / ) ดังนั้นฉันต้องcd ../
ขึ้นไปยังไดเรกทอรีที่สองเพื่อลบไฟล์ที่สองโดยใช้คำสั่งนั้น
ดูที่git clean
คำสั่ง
git-clean - ลบไฟล์ที่ไม่ได้ติดตามจากแผนผังการทำงาน
ทำความสะอาดแผนผังการทำงานโดยลบไฟล์ที่ไม่อยู่ภายใต้การควบคุมเวอร์ชันซ้ำ ๆ เริ่มจากไดเรกทอรีปัจจุบัน
โดยปกติไฟล์ที่ไม่รู้จัก git เท่านั้นที่ถูกลบ แต่ถ้าระบุตัวเลือก -x ไฟล์ที่ถูกละเว้นจะถูกลบด้วยเช่นกัน เช่นนี้สามารถเป็นประโยชน์ในการลบผลิตภัณฑ์สร้างทั้งหมด
git clean -i
และเลือก "ล้าง" จากเมนูแล้วนี่เป็นการลบไฟล์ใหม่ในที่สุด
ผลงานดังต่อไปนี้:
git add -A .
git stash
git stash drop stash@{0}
โปรดทราบว่าการดำเนินการนี้จะยกเลิกการเปลี่ยนแปลงในพื้นที่ทั้งที่ไม่มีการจัดเตรียมและเป็นระยะ ดังนั้นคุณควรกระทำสิ่งใดก็ตามที่คุณต้องการเก็บไว้ก่อนที่คุณจะรันคำสั่งเหล่านี้
กรณีการใช้งานทั่วไป: คุณย้ายไฟล์หรือไดเรกทอรีจำนวนมากรอบ ๆ แล้วต้องการกลับสู่สถานะดั้งเดิม
git stash drop
?
git add -A .
) ฉันเสียไป 30m เพราะไม่มีไฟล์ที่ตรงกัน ขอบคุณ!
คุณสามารถทำได้สองขั้นตอน:
git checkout -f
git clean -fd
ฉันคิดว่ามันเป็น ( คำเตือน: ต่อไปนี้จะล้างทุกอย่าง )
$ git reset --hard HEAD
$ git clean -fd
reset
ยกเลิกการเปลี่ยนแปลง clean
เพื่อลบใด ๆ ที่ไม่ได้ติดตามฉไมล์และd irectories
git pull
ภายหลัง: CONFLICT (content): Merge conflict in...
ฉันจะแก้ไขปัญหานี้ได้โดยgit pull --strategy=ours
git reset --hard origin/{branchName}
มันจะลบไฟล์ที่ไม่ได้ติดตามทั้งหมด
git clean -i
จะแสดงรายการที่จะถูกลบและดำเนินการต่อหลังจากการยืนยันของคุณ ฉันพบว่ามีประโยชน์เมื่อจัดการกับไฟล์สำคัญที่ไม่ควรลบโดยไม่ตั้งใจ
ดูgit help clean
ข้อมูลเพิ่มเติมรวมถึงตัวเลือกที่มีประโยชน์อื่น ๆ
หากคุณต้องการยกเลิกการเปลี่ยนแปลงทั้งหมดที่คุณสามารถใช้ตัวเลือกใด ๆ .gitconfig
ที่ถูกต้องในนามแฝงใน ตัวอย่างเช่น
[alias]
discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"
การใช้งาน: git discard
อีกทางเลือกหนึ่งคือแก้ไขการเปลี่ยนแปลงและกำจัดการกระทำเหล่านั้น สิ่งนี้ไม่ได้รับประโยชน์ทันทีในตอนแรก แต่จะเปิดโอกาสให้กระทำการในกลุ่มและสร้างแท็ก git สำหรับการสำรองข้อมูล
คุณสามารถทำได้ในสาขาปัจจุบันเช่นนี้
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git revert HEAD
git reset HEAD^^
หรือคุณสามารถทำได้บน HEAD เดี่ยว (สมมติว่าคุณเริ่มที่สาขา BRANCHNAME):
git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git checkout BRANCHNAME
อย่างไรก็ตามสิ่งที่ฉันมักจะทำคือการกระทำเป็นชิ้น ๆ จากนั้นตั้งชื่อบางส่วนหรือทั้งหมดที่เรียกว่า "DISCARD: ... " จากนั้นใช้การรีบูตแบบโต้ตอบเพื่อลบการกระทำที่ไม่ดีและรักษาสิ่งที่ดี
git add -p # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id) # rebase on the commit id before the changes.
# Remove the commits that say "DISCARD".
นี่เป็นสิ่งที่ละเอียดยิ่งขึ้น แต่ช่วยให้คุณตรวจสอบได้อย่างแม่นยำว่าการเปลี่ยนแปลงใดที่คุณต้องการยกเลิก
git lol
และgit lola
ทางลัดที่ได้รับประโยชน์มากกับเวิร์กโฟลว์นี้
สำหรับโฟลเดอร์เฉพาะฉันใช้:
git checkout -- FolderToClean/*
อาจเป็นคำตอบ noob แต่: ฉันใช้ TortoiseGit สำหรับ windows และมีคุณสมบัติที่ดีที่เรียกว่า REVERT ดังนั้นสิ่งที่คุณทำเพื่อยกเลิกการเปลี่ยนแปลงที่ไม่มีการผลักดันแบบ nonstaged ในพื้นที่ของคุณคือ:
git help reset
และgit help clean