ฉันเพิ่งโคลนที่เก็บ git และตรวจสอบสาขา ฉันทำงานกับมันจากนั้นจึงตัดสินใจที่จะลบการเปลี่ยนแปลงในท้องถิ่นทั้งหมดของฉันตามที่ฉันต้องการสำเนาต้นฉบับ
ในระยะสั้นฉันต้องทำสองคำสั่งต่อไปนี้เพื่อลบการเปลี่ยนแปลงในเครื่องของฉัน
git checkout .
git clean -f
คำถามของฉันคือ
(1) นี่คือวิธีการที่ถูกต้องในการกำจัดการเปลี่ยนแปลงในท้องถิ่นหรืออื่น ๆ โปรดแจ้งให้เราทราบวิธีการที่ถูกต้อง
(2) เราจะใช้เมื่อใดgit reset --hard
ที่ฉันสามารถรีเซ็ตแม้ไม่มีคำสั่งนี้
ขอบคุณ
* การแก้ไข: การแก้ไขที่สำคัญ: 03/26: * แทนที่คำที่คลุมเครือจำนวนมากด้วยคำศัพท์เฉพาะของคอมไพล์ [ติดตาม / ไม่ได้ติดตาม / จัดฉาก / ไม่ต่อเนื่อง]
อาจมีไฟล์เพียงสามประเภทเมื่อเราทำการเปลี่ยนแปลงในเครื่อง:
ประเภทที่ 1. ไฟล์ที่ถูกติดตามแบบจัดฉาก
ประเภทที่ 2. ไฟล์ที่ไม่ได้ติดตามสถานะ
ประเภทที่ 3. ไฟล์ที่ไม่ได้ติดตาม Unstaged หรือไฟล์ที่ไม่ได้ติดตาม
- ฉาก - ผู้ที่ถูกย้ายไปยังพื้นที่การแสดงละคร / เพิ่มไปยังดัชนี
- ไฟล์ที่ถูกติดตาม - แก้ไข
- เลิกติดตาม - ไฟล์ใหม่ ไม่สเตจเสมอ หากฉากนั่นหมายความว่าพวกเขามีการติดตาม
แต่ละคำสั่งทำอะไร:
git checkout .
- ลบไฟล์ที่ไม่ได้ติดตามเท่านั้น [ประเภท 2]git clean -f
- ลบไฟล์ที่ไม่ได้ติดตาม Unstaged เท่านั้น [ประเภท 3]git reset --hard
- ลบไฟล์ที่ติดตามแบบ Staged และ UnStaged เท่านั้น [Type 1, Type 2]git stash -u
- ลบการเปลี่ยนแปลงทั้งหมด [ประเภท 1, ประเภท 2, ประเภท 3]
สรุป:
เป็นที่ชัดเจนว่าเราสามารถใช้อย่างใดอย่างหนึ่ง
(1) combination of `git clean -f` and `git reset --hard`
หรือ
(2) `git stash -u`
เพื่อให้บรรลุผลตามที่ต้องการ
หมายเหตุ: การซ่อนเนื่องจากคำนี้หมายถึง 'ร้านค้า (บางอย่าง) อย่างปลอดภัยและเป็นความลับในสถานที่ที่ระบุ' git stash pop
นี้จะสามารถดึงข้อมูลโดยใช้ ดังนั้นการเลือกระหว่างสองตัวเลือกข้างต้นจึงเป็นการเรียกนักพัฒนาซอฟต์แวร์
ขอขอบคุณคุณ Christoph และ Frederik Schøning
แก้ไข: 03/27
ฉันคิดว่ามันคุ้มค่าที่จะนำข้อความ ' ระวัง ' ไปใช้git clean -f
git clean -f
ไม่มีการกลับไป ใช้-n
หรือ--dry-run
ดูตัวอย่างความเสียหายที่คุณจะทำ
หากคุณต้องการลบไดเรกทอรีให้รัน git clean -f -d
หากคุณต้องการลบไฟล์ที่ไม่สนใจให้รัน git clean -f -X
หากคุณต้องการลบไฟล์ที่ไม่สนใจเช่นเดียวกับไฟล์ที่ไม่ถูกละเว้นให้รัน git clean -f -x
การอ้างอิง: เพิ่มเติมเกี่ยวกับgit clean
: วิธีลบไฟล์ในเครื่อง (ไม่ได้ติดตาม) ออกจากแผนผังการทำงาน Git ปัจจุบัน
แก้ไข: 05/20/15
การละทิ้งการทำคอมมิชชันทั้งหมดในสาขานี้ [การลบการคอมมิทภายในเครื่อง]
เพื่อที่จะทิ้งข้อผูกพันในท้องถิ่นทั้งหมดในสาขานี้เพื่อให้สาขาในท้องถิ่นเหมือนกับ "อัปสตรีม" ของสาขานี้เพียงแค่เรียกใช้ git reset --hard @{u}
การอ้างอิง: http://sethrobertson.github.io/GitFixUm/fixup.html
หรือทำgit reset --hard origin/master
[ถ้าสาขาท้องถิ่นmaster
]
หมายเหตุ: 06/12/2015 นี่ไม่ใช่คำถามซ้ำซ้อนของ SO อื่นที่ทำเครื่องหมายว่าซ้ำกัน คำถามนี้กล่าวถึงวิธีลบการเปลี่ยนแปลง GIT ในระบบ [ลบไฟล์ที่เพิ่มลบการเปลี่ยนแปลงที่เพิ่มไปยังไฟล์ที่มีอยู่ ฯลฯ และวิธีการต่าง ๆ ; โดยที่ในเธรด SO อื่นจะระบุวิธีการลบการกระทำในเครื่องเท่านั้น หากคุณเพิ่มไฟล์และต้องการลบเพียงอย่างเดียวเธรด SO อื่นจะไม่พูดถึง ดังนั้นสิ่งนี้จึงไม่ซ้ำกับอีก]
แก้ไข: 06/23/15
วิธีการคืนค่าการคอมมิตที่ผลักไปยังที่เก็บรีโมตแล้ว?
$ git revert ab12cd15
แก้ไข: 09/01/2015
ลบการคอมมิชชันก่อนหน้าจากสาขาโลคัลและรีโมตสาขา
กรณี: คุณเพิ่งส่งการเปลี่ยนแปลงไปยังสาขาในพื้นที่ของคุณและผลักดันไปยังสาขาที่อยู่ห่างไกลทันทีทันใดตระหนักแล้วว่าไม่! ฉันไม่ต้องการการเปลี่ยนแปลงนี้ ตอนนี้ทำอะไร
git reset --hard HEAD~1
[สำหรับการลบที่กระทำจากสาขาท้องถิ่น]
git push origin HEAD --force
[ทั้งสองคำสั่งจะต้องดำเนินการ สำหรับการลบจากสาขาระยะไกล]
สาขาคืออะไร มันเป็นสาขาที่เช็คเอาท์ในปัจจุบัน
แก้ไข 2015/09/08 - ลบคอมไพล์ท้องถิ่นผสาน :
ฉันอยู่ในmaster
สาขาและรวมmaster
สาขากับสาขาที่ทำงานใหม่phase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
ถาม: จะกำจัดการผสานนี้ได้อย่างไร พยายามgit reset --hard
และgit clean -d -f
ทั้งสองไม่ทำงาน
สิ่งเดียวที่ทำงานอยู่ที่ใด ๆ ของคนดังต่อไปนี้:
$ git reset --hard origin/master
หรือ
$ git reset --hard HEAD~8
หรือ
$ git reset --hard 9a88396f51e2a068bb7
[รหัสการยอมรับ - นี่คือสิ่งที่เกิดขึ้นก่อนที่การรวมทั้งหมดของคุณจะเกิดขึ้น]
git stash -a
[หรือ - ทั้งหมด] จะซ่อนไฟล์ที่ละเว้นและไม่ได้ติดตามเช่นกัน git clean -x
จะล้างไฟล์ที่ถูกละเว้นด้วย git clean -X
จะล้างเฉพาะไฟล์ที่ถูกละเว้น