สามารถคอมไพล์เลิกทำการเช็คเอาต์ไฟล์ที่ไม่จัดเก็บได้


164

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


ไม่เราทำไม่ได้ แต่ถ้าคุณใช้ eclipse เราสามารถตรวจสอบทีม -> ประวัติท้องถิ่น
USM

คำตอบ:


106

ฉันเชื่อว่าหากไฟล์ถูกแก้ไข แต่ยังไม่ได้เพิ่ม (staged) ไฟล์นั้นจะเป็น "ส่วนตัว" อย่างแท้จริง
ความหมายมันไม่สามารถกู้คืนได้โดย GIT หากเขียนทับด้วยดัชนีหรือรุ่น HEAD (เว้นแต่คุณจะมีสำเนางานปัจจุบันอยู่ที่อื่น) "

เนื้อหา "ส่วนตัว" สามารถมองเห็นได้ในไดเรกทอรีปัจจุบันของคุณเท่านั้น แต่ไม่ได้ลงทะเบียนใน Git


5
ฉันเข้าใจว่าการเปลี่ยนแปลงไฟล์ 'ส่วนตัว' ไม่สามารถเลิกทำได้โดยคอมไพล์ แต่ถ้าแฟ้มถูกแก้ไขโดยคอมไพล์ (เช่นผ่านทางgit checkout --) reflogผมคาดหวังว่ามันจะสามารถยกเลิกการดำเนินการที่อาจจะผ่านทาง ความคาดหวังนั้นผิดหรือเปล่า?
Ciprian Tomoiagă

2
reflog @CiprianTomoiaga สำหรับที่ผ่านมาunreferencedกระทำ หากสิ่งที่คุณต้องการกู้คืนไม่ได้กระทำ (หรือจัดฉาก) การอ้างอิงจะไม่ช่วยคุณ
VonC

3
@CiprianTomoiaga สำหรับเนื้อหาส่วนตัวประเภทใด ๆ (ยังไม่ได้เพิ่ม) คุณต้องพึ่งพา แต่เพียงผู้เดียวในการแก้ไขหรือคุณสมบัติ IDE ตัวอย่างสำหรับ eclipse: help.eclipse.org/neon/…
VonC

5
ว้าว! Unbelieable ฉันจำเป็นต้องตรวจสอบไฟล์เดียวดังนั้นฉันจึงต้องพิมพ์git checkout folders/subfolders/fileแต่กด Enter โดยไม่ตั้งใจหลังจากไปfolderและทำงานทั้งหมดของฉัน / คือ 1 ซม. จากการป้อนบนแป้นพิมพ์ของฉันและฉันสลับระหว่างเครื่องที่มีรูปแบบแป้นพิมพ์ที่แตกต่างกันบ่อยครั้งดังนั้นจึงมีเวลา 10-15 นาทีที่นิ้วของฉันจะคุ้นเคยกับตำแหน่งใหม่ ยากที่จะเชื่อในปี 2018 ที่คอมไพล์ไฟล์ขยะแม้ว่ามันจะบอกว่าในหนังสือคอมไพล์ที่คอมไพล์ทำจากมันเป็นวิธีที่จะไม่ทำงาน
gman

1
@gman คำตอบด้านล่างเกี่ยวกับ "ประวัติท้องถิ่น" จาก IDE ช่วยให้คุณกู้คืนงานของคุณหรือไม่
VonC

174

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


37
FYI ฟีเจอร์นี้มีให้บริการในตระกูล JetBrains ทั้งหมดของ IDE "ระดับมืออาชีพ": Pycharm, IDEA, PHPStorm, Webstorm บันทึก bakken ของฉันวันนี้ ขอบคุณคริสโตฟ!
Ben Roberts

6
ฉันต้องขอบคุณ ฉันใช้ WebStorm และลืมเกี่ยวกับฟีเจอร์นั้นอย่างสมบูรณ์แม้ว่าฉันจะใช้มันบ่อยครั้งก็ตาม ฉันหลงลืมรหัสไปฉันไม่ได้คิดถึงมัน!
Tyson Phalp

8
ใน eclipse คุณสามารถคลิกขวาที่ไฟล์ -> เปรียบเทียบกับ -> ประวัติท้องถิ่น
Maragues

5
ดีเยี่ยม Sublime2 เลิกทำยังย้อนกลับการเปลี่ยนแปลงที่ทำโดยการชำระเงิน git โดยไม่ตั้งใจบนดิสก์
shuckc

8
หากใครบางคนพบว่ากระทู้นี้ทำลายงานบางส่วนใน XCode มีวิธีรับประวัติบันทึกอัตโนมัติ XCode นั้นไม่มีรายการเมนูเพื่อดูประวัติการบันทึกอัตโนมัติ แต่จะเก็บไว้ หากคุณเปิดไฟล์ที่เป็นปัญหาใน TextEdit คุณสามารถย้อนกลับและดูประวัติบันทึกอัตโนมัติภายใต้ไฟล์> เปลี่ยนกลับ
qingu

66

หากคุณกำลังทำงานในโปรแกรมแก้ไขเช่น Sublime Text และมีไฟล์ที่เป็นปัญหายังคงเปิดอยู่คุณสามารถกด ctrl + z และมันจะกลับสู่สถานะเดิมก่อนที่จะทำการเช็คเอาต์


9
คำตอบนี้ถูกบันทึกไว้ในวันของฉัน ขอบคุณมาก!
feyyaz

ฉันสะดุดในการแก้ไขนี้โดยบังเอิญในขณะนี้และกำลังจะโพสต์คำตอบใหม่ ดูเหมือนว่า Sublime จะจับ Git การเปลี่ยนสถานะไฟล์ในประวัติการแก้ไขไฟล์
Timmah

ทำงานให้ฉันใน Ecipse
ความผิดปกติ

4
ทำงานให้กับ Visual Studio Code ด้วย
intotecho

44

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

นำมาจากด้านสว่าง: ตอนนี้คุณสามารถใช้สิ่งต่าง ๆ ได้ดียิ่งขึ้น;)


26

ตรวจสอบประวัติท้องถิ่นใน IDE ของคุณ


เพิ่งผิดพลาดที่จะไม่แสดงการเปลี่ยนแปลงของฉันและบังคับให้เช็คเอาต์ ฉันตรวจสอบประวัติท้องถิ่นของฉันใน Android Studio (ดู -> การเปลี่ยนแปลงล่าสุด) และย้อนกลับการเปลี่ยนแปลงล่าสุดที่ฉันทำ ข้อมูลเพิ่มเติมได้ที่นี่jetbrains.com/help/idea/2016.3/…
2559

สิ่งนี้ทำงานได้อย่างสมบูรณ์ใน RubyMine การกระทำของการลบการเปลี่ยนแปลงของคุณจะถูกอ้างอิงเป็น "การเปลี่ยนแปลงภายนอก" ขอบคุณมากสำหรับ Marcin นี้มันช่วยฉันได้เพียงหนึ่งชั่วโมงจากการสูญเสียงาน!
AndrewSouthpaw

25

การพัฒนาบนOS X? ใช้Xcode ไหม คุณน่าจะโชคดี!

ตามที่อธิบายไว้ในการแสดงความคิดเห็นโดย qungu , OS X รักษาบันทึกอัตโนมัติประวัติรุ่นของแฟ้มแม้ว่าคุณไม่ได้ใช้เครื่องย้อนเวลา

ดังนั้นถ้าคุณได้ปลิวไปเปลี่ยนแปลงในท้องถิ่นของคุณกับ unstaged ประมาทgit checkout .นี่คือวิธีที่คุณสามารถอาจกู้คืนทุกการทำงานของคุณ

หากใครบางคนพบว่ากระทู้นี้มีการทำลายงานใน XCode มีวิธีที่จะได้รับประวัติบันทึกอัตโนมัติ XCode นั้นไม่มีรายการเมนูเพื่อดูประวัติการบันทึกอัตโนมัติ แต่จะเก็บไว้ หากคุณเปิดไฟล์ดังกล่าวใน TextEdit คุณสามารถย้อนกลับและดูประวัติบันทึกอัตโนมัติภายใต้ไฟล์> ย้อนกลับ

ซึ่งยอดเยี่ยมมากและกู้คืนได้หนึ่งวันสำหรับฉันเมื่อวานนี้


คุณอาจถามว่า"ทำไม UI บรรทัดคำสั่ง git ไม่เป็น VCS ระดับพรีเมียร์ที่ใช้สำหรับวิศวกรรมซอฟต์แวร์ใน2016 2017 20182019 อย่างน้อยต้องสำรองไฟล์ก่อนที่จะพัดไป เช่นเดียวกับที่คุณรู้เครื่องมือซอฟต์แวร์ที่เขียนขึ้นอย่างดีในช่วงสามทศวรรษที่ผ่านมา "

หรือบางทีคุณถามว่า"เหตุใดคุณสมบัติประวัติไฟล์ที่ยอดเยี่ยมนี้จึงสามารถเข้าถึงได้ใน TextEdit แต่ไม่ใช่ Xcode ที่ฉันต้องการจริง ๆ "

ฉันคิดว่า…และทั้งสองอย่างนี้จะบอกคุณค่อนข้างมากเกี่ยวกับอุตสาหกรรมของเรา หรือบางทีคุณอาจไปและแก้ไขเครื่องมือเหล่านั้น ซึ่งจะเป็นซุปเปอร์


2
ฉันสามารถยืนยันได้ว่าสิ่งนี้ได้ผล เพียงแค่ช่วยฉันชั่วโมงทำงาน!
Bruno Rocha

ไม่ทำงานสำหรับฉันเพราะไฟล์ที่เกี่ยวข้องเป็นที่Modelน่าเสียดาย
brahimm

@Brahimm รุ่น?
Benjohn

1
นี่เพิ่งช่วยฉันปวดใจได้หนึ่งตัน ขอบคุณมาก.
squarefrog

1
น่าสนใจมาก: ฉันคลิกขวาที่ไฟล์ต้นฉบับและดูที่เมนู "เปิดด้วย" ทั้ง TextEdit 1.14 และ TextEdit 1.6 อยู่ที่นั่นเป็นตัวเลือก เฉพาะ TextEdit 1.14 เท่านั้นที่มีตัวเลือกให้เปลี่ยนกลับเป็นรุ่นที่เก่ากว่า UI นั้นดีมากเหมือนกับ TimeMachine
bugloaf

7

ใน VSCODE ctrl + z (เลิกทำ) ใช้ได้สำหรับฉัน

ฉันทำgit checkout .แทนgit add .และการเปลี่ยนแปลงไฟล์ทั้งหมดของฉันก็หายไป

แต่ตอนนี้ใช้command + zใน mac ของฉันกู้คืนการเปลี่ยนแปลงและบันทึกเสียงการทำงานสำหรับฉัน


มีวิธีอื่นอีกไหม?
Abdul Manan


2

ผู้ช่วยที่มีประสิทธิภาพสำหรับสถานการณ์เช่นนี้คือ Time Machine (OS X) หรือระบบสำรองข้อมูลตามเวลาที่คล้ายกัน มันช่วยฉันสองสามครั้งเพราะฉันสามารถย้อนกลับและกู้คืนไฟล์นั้นได้เพียงไฟล์เดียว


1
เรียนผู้ลงคะแนนเสียงโปรดช่วยอธิบายว่าฉันจะปรับปรุงคำตอบนี้ได้อย่างไร
sscirrus

1

ฉันเพิ่งเกิดสิ่งนั้นกับฉันฉันไปดูทั้งโฟลเดอร์ที่มีชั่วโมงการทำงาน! โชคดีที่ฉันพบว่า IDE Netbeans ของฉันเก็บประวัติของแต่ละไฟล์ซึ่งทำให้ฉันสามารถกู้คืน 99% ของสิ่งต่าง ๆ แม้ว่าฉันจะต้องแก้ไขบางสิ่งด้วยตนเอง


0

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

หวังว่านี่จะช่วยได้


0

ใช่แล้ว แต่ในบางกรณีเท่านั้น ตัวอย่างเช่นถ้าคุณมีรหัสหน้าขึ้นมาและคุณกดเช็คเอาต์คอมไพล์แล้วคุณก็รู้ว่าคุณเช็คเอาต์ผิดหน้าหรือบางอย่างผิดพลาด ไปที่หน้าและคลิกเลิกทำ (สำหรับฉันคำสั่ง + z) และมันจะกลับไปที่ที่คุณเคยอยู่ก่อนที่คุณจะไปถึงจุดชำระเงิน git เก่าที่ดี

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


0

ถ้าคุณทำงานกับ / ขั้ว cmd พรอมต์เปิดและใช้คำสั่งคอมไพล์ใด ๆ ที่จะได้แสดงให้เห็นการเปลี่ยนแปลง unstaged ( diff, add -p, checkout -pฯลฯ ) และยังไม่ได้ปิด / ขั้ว cmd พรอมต์ตั้งแต่คุณจะพบการเปลี่ยนแปลง unstaged ยังคงพร้อมใช้งานหากคุณเลื่อนไปยังตำแหน่งที่คุณรันคำสั่ง git ดังกล่าว


0

เพื่อน,

สมมติว่าคุณเป็นคนที่โชคดีมากอย่างที่ฉันเคยกลับไปที่เครื่องมือแก้ไขของคุณและเลิกทำ (คำสั่ง + Z สำหรับ mac) คุณควรเห็นเนื้อหาที่หายไปของคุณในไฟล์ หวังว่ามันจะช่วยคุณ แน่นอนว่าสิ่งนี้จะใช้ได้กับไฟล์ที่มีอยู่เท่านั้น


-1

บางทีการเปลี่ยนแปลงของคุณจะไม่สูญหาย ตรวจสอบ "git reflog"

ฉันพูดบทความด้านล่าง:

"โดยทั่วไปทุกการกระทำที่คุณทำภายใน Git ที่เก็บข้อมูลคุณสามารถค้นหาได้จาก reflog Git พยายามอย่างหนักที่จะไม่สูญเสียข้อมูลของคุณดังนั้นถ้าด้วยเหตุผลบางอย่างที่คุณคิดว่ามีโอกาสคุณสามารถขุดได้ ใช้ git reflog "

ดูรายละเอียด:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html


3
อย่าเพิ่งได้รับความหวัง - ขอความช่วยเหลือเท่านั้นเมื่อคุณมีปฏิสัมพันธ์กับคอมไพล์อย่างมีความหมาย เพียงแก้ไขไฟล์แล้วเป่ามันออกไปด้วยเช็คเอาต์คอมไพล์? คอมไพล์ไม่เคยมีโอกาส
Bob Gilmore

1
+1 จากฉัน - คิดว่ามันคุ้มค่าที่จะพูดถึงที่git reflogนี่ฉันพบคำตอบนี้เมื่อฉันกำลังค้นหาการยกเลิกgit checkout HEAD .- ฉันหมายถึงพิมพ์git reset HEAD .- ฉันเพิ่งทำ 'รีเซ็ต git - soft HEAD ~ 1' และไม่รู้ เกี่ยวกับgit reflogดังนั้นก็สามารถที่จะได้รับกลับมาทำงานที่ผมเคยทำมา :)
รัสเซลอังกฤษ

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