Có thể git hoàn tác kiểm tra các tập tin chưa được phân loại


164

Tôi vô tình loại bỏ các thay đổi của tôi trên các tệp trong cây làm việc cục bộ của tôi thông qua kiểm tra git. Các tập tin không được dàn dựng tại thời điểm này. Có thể "hoàn tác" thanh toán này không?


Không, chúng tôi không thể, nhưng nếu bạn đang sử dụng nhật thực, chúng tôi có thể kiểm tra Đội -> Lịch sử địa phương
USM

Câu trả lời:


105

Tôi tin rằng nếu một tệp được sửa đổi nhưng chưa được thêm (dàn dựng), thì đó hoàn toàn là "riêng tư".
Có nghĩa là nó không thể được khôi phục bằng GIT nếu được ghi đè bằng chỉ mục hoặc phiên bản CHÍNH (trừ khi bạn có bản sao công việc hiện tại của mình ở đâu đó). "

Nội dung "riêng tư" chỉ có thể nhìn thấy trong thư mục hiện tại của bạn, nhưng không được đăng ký theo bất kỳ cách nào trong Git.


5
Tôi hiểu rằng những thay đổi đối với tệp 'riêng tư' có thể được hoàn tác bởi git. Tuy nhiên, nếu tệp được sửa đổi bởi git (ví dụ: thông qua git checkout --), tôi hy vọng nó có thể hoàn tác thao tác đó, có thể thông qua reflog. Đó có phải là kỳ vọng sai lầm?
Ciprian Tomoiagă

2
@CiprianTomoiaga reflog dành cho các cam kết không được ước tính trong quá khứ . Nếu những gì bạn muốn khôi phục không được cam kết (hoặc dàn dựng), reflog sẽ không giúp bạn.
VonC

3
@CiprianTomoiaga cho bất kỳ loại nội dung riêng tư nào (chưa được thêm), bạn sẽ chỉ dựa vào trình soạn thảo hoặc tính năng IDE của mình. Ví dụ cho nhật thực: help.eclipse.org/neon/ Kẻ
VonC

5
Ồ Không thể chịu đựng được. Tôi cần kiểm tra một tập tin vì vậy tôi có ý định gõ git checkout folders/subfolders/filenhưng vô tình nhấn enter sau khi nhận được foldervà mất tất cả công việc. / cách phím nhập trên bàn phím của tôi 1cm và tôi thường xuyên chuyển đổi giữa các máy có bố cục bàn phím khác nhau nên thường ngón tay của tôi sẽ quen với các vị trí mới. Khó có thể tin vào năm 2018 rằng git rác tập tin mặc dù nó nói trong cuốn sách git mà git làm theo cách của nó để không mất việc.
gman

1
@gman câu trả lời dưới đây về "lịch sử địa phương" do IDE cung cấp có giúp bạn phục hồi công việc không?
VonC

173

Nếu bạn đang sử dụng IDE "chuyên nghiệp" thì rất có thể bạn có thể khôi phục các tệp từ Lịch sử cục bộ. Ví dụ, trong Rubymine, bạn có thể nhấp chuột phải vào tệp và xem lịch sử thay đổi độc lập với thay đổi git, đã lưu tôi vài lần bây giờ ^^


36
FYI tính năng này có sẵn trong toàn bộ gia đình IDE "chuyên nghiệp" của JetBrains: Pycharm, IDEA, PHPStorm, Webstorm. Đã lưu bakken của tôi ngày hôm nay. Cảm ơn, Christoph!
Ben Roberts

6
Tôi phải cảm ơn bạn. Tôi sử dụng WebStorm và hoàn toàn quên mất tính năng đó, mặc dù tôi sử dụng nó khá thường xuyên. Tôi đã bị bắt vì mất mã, tôi đã không nghĩ về nó!
Tyson Phalp

8
Trong nhật thực, bạn có thể nhấp chuột phải vào tệp -> so sánh với -> lịch sử địa phương
Maragues

5
tuyệt vời. Sublime2 hoàn tác cũng khôi phục các thay đổi được thực hiện bằng cách kiểm tra git tình cờ trên đĩa.
shuckc

8
Nếu ai đó tìm thấy luồng này đã phá hủy một số công việc trong XCode, có một cách để lấy lịch sử AutoSave. Bản thân XCode không có mục menu để xem lịch sử AutoSave, nhưng nó lưu trữ nó. Nếu bạn mở các tệp được đề cập trong TextEdit, bạn có thể hoàn nguyên và xem qua lịch sử Tự động lưu trong Tệp> Hoàn nguyên.
qingu

66

Nếu bạn đang làm việc trong một trình soạn thảo như Sublime Text và tệp vẫn đang được mở, bạn có thể nhấn ctrl + z và nó sẽ trở về trạng thái trước khi kiểm tra git.


9
Câu trả lời này được lưu trong ngày của tôi. Cảm ơn rất nhiều!
feyyaz

Tôi tình cờ sửa chữa điều này một cách tình cờ, và chuẩn bị đăng một câu trả lời mới. Có vẻ như Sublime chụp Git thay đổi trạng thái tệp trong lịch sử sửa đổi tệp của nó.
Timmah

Làm việc cho tôi trong Ecipse.
Bất thường

4
Đã làm việc cho Visual Studio Code
intotecho

44

Thật không may, những thay đổi của bạn bị mất. Sửa đổi riêng tư của bạn chỉ đơn giản là ghi đè. Trừ khi bạn đã làmgit stash thực hiện thanh toán trước ...

Lấy nó từ phía sáng hơn: bây giờ bạn có thể thực hiện mọi thứ thậm chí còn tốt hơn;)


26

Kiểm tra lịch sử địa phương trong IDE của bạn.


Chỉ cần làm một sai lầm là không dàn dựng các thay đổi của tôi và buộc phải kiểm tra. Tôi đã kiểm tra lịch sử địa phương của mình trong Android Studio (xem -> các thay đổi gần đây) và hoàn nguyên các thay đổi cuối cùng tôi đã thực hiện. Thêm thông tin tại đây jetbrains.com/help/idea/2016.3/ trên
emen

Điều này hoạt động hoàn toàn tốt trong RubyMine, hành động xóa sạch các thay đổi của bạn sẽ được gọi là "Thay đổi bên ngoài". Cảm ơn rất nhiều vì Marcin này, nó chỉ giúp tôi tiết kiệm được một giờ làm việc!
AndrewSouthpaw

25

Phát triển trên OS X? Sử dụng Xcode? Bạn có thể gặp may mắn!

Như được mô tả trong một nhận xét của qungu , OS X duy trì lịch sử phiên bản tự động của các tệp, ngay cả khi bạn không sử dụng cỗ máy thời gian .

Vì vậy, nếu bạn đã thổi bay những thay đổi cục bộ không có căn cứ của mình một cách bất cẩn git checkout ., thì đây là cách bạn có thể phục hồi tất cả công việc của mình.

Nếu ai đó tìm thấy luồng này đã phá hủy một số công việc trong XCode, có một cách để lấy lịch sử AutoSave. Bản thân XCode không có mục menu để xem lịch sử AutoSave, nhưng nó lưu trữ nó. Nếu bạn mở các tệp được đề cập trong TextEdit, bạn có thể hoàn nguyên và xem qua lịch sử Tự động lưu trong Tệp> Hoàn nguyên.

Điều đó thật tuyệt vời, và hồi phục về một ngày làm việc cho tôi, ngày hôm qua.


Bạn có thể hỏi, "Tại sao UI không phải là dòng lệnh git, VCS hàng đầu được sử dụng cho công nghệ phần mềm trong2016 2017 20182019, ít nhất là sao lưu các tập tin trước khi thổi chúng đi? Giống như, bạn biết đấy, các công cụ phần mềm được viết tốt trong khoảng ba thập kỷ qua. "

Hoặc có lẽ bạn hỏi, "Tại sao tính năng lịch sử tệp cực kỳ tuyệt vời này có thể truy cập được trong TextEdit mà không phải là Xcode nơi tôi thực sự cần nó?"

Tôi và cả hai người, tôi nghĩ, sẽ cho bạn biết khá nhiều về ngành công nghiệp của chúng tôi. Hoặc có thể bạn sẽ đi và sửa những công cụ đó. Mà sẽ là siêu.


2
Tôi có thể xác nhận rằng điều này hoạt động. Điều này chỉ giúp tôi tiết kiệm hàng giờ làm việc!
Bruno Rocha

không làm việc cho tôi vì tập tin liên quan là Modelkhông may
brahimm

@brahimm Người mẫu?
Stewohn

1
Điều này chỉ giúp tôi tiết kiệm được một tấn đau lòng. Cảm ơn bạn rất nhiều.
Squarefrog

1
Rất thú vị: Tôi nhấp chuột phải vào tệp nguồn của mình và xem menu "Mở bằng". Cả TextEdit 1.14 và TextEdit 1.6 đều có các lựa chọn. Chỉ TextEdit 1.14 có tùy chọn hoàn nguyên về các phiên bản cũ hơn. Giao diện người dùng rất đẹp, giống như TimeMachine.
bugloaf 17/03/19

6

Trong VSCODE ctrl + z (hoàn tác) làm việc cho tôi

Tôi đã làm git checkout .thay vìgit add . và tất cả các thay đổi tập tin của tôi đã bị mất.

Nhưng bây giờ sử dụng command + ztrong máy mac của tôi, đã phục hồi các thay đổi và lưu lại một giai điệu công việc cho tôi.


Có cách nào khác không?
Abdul Manan


2

Một vị cứu tinh hiệu quả cho loại tình huống này là Time Machine (OS X) hoặc một hệ thống sao lưu dựa trên thời gian tương tự. Nó đã tiết kiệm cho tôi một vài lần vì tôi có thể quay lại và khôi phục chỉ một tệp đó.


1
Kính gửi downvoter - bạn có thể vui lòng giải thích làm thế nào tôi có thể cải thiện câu trả lời này?
sscirrus

1

Tôi vừa mới xảy ra với tôi, tôi đã kiểm tra toàn bộ thư mục chứa hàng giờ làm việc! May mắn thay tôi phát hiện ra rằng IDE Netbeans của tôi lưu giữ lịch sử của từng tệp, cho phép tôi phục hồi 99% nội dung mặc dù tôi cần sửa một số thứ theo cách thủ công.


0

Tôi thường có tất cả các công việc của tôi trong một thư mục dropbox. Điều này đảm bảo với tôi rằng tôi sẽ có sẵn thư mục hiện tại bên ngoài máy cục bộ và Github. Tôi nghĩ rằng đó là bước khác của tôi để đảm bảo "kiểm soát phiên bản" khác với git.Bạn có thể làm theo điều này để hoàn nguyên tệp của bạn về các phiên bản trước của tệp dropbox của bạn

Hi vọng điêu nay co ich.


0

Về mặt kỹ thuật thì có. Nhưng chỉ trong một số trường hợp nhất định. Ví dụ, nếu bạn có trang mã lên và bạn nhấn kiểm tra git và bạn nhận ra rằng bạn đã vô tình kiểm tra trang sai hoặc một cái gì đó. Chuyển đến trang và nhấp vào hoàn tác. (đối với tôi, lệnh + z), và nó sẽ quay trở lại chính xác vị trí của bạn trước khi bạn đạt được kiểm tra git cũ tốt.

Điều này sẽ không hoạt động nếu trang của bạn đã bị đóng, và sau đó bạn nhấn kiểm tra git. Nó chỉ hoạt động nếu trang mã thực tế đang mở


0

Nếu bạn làm việc với một / terminal cmd nhắc mở, và sử dụng bất kỳ lệnh git mà có thể đã cho thấy những thay đổi unstaged ( diff, add -p, checkout -p, vv), và chưa đóng / terminal cmd nhắc từ đó, bạn sẽ thấy những thay đổi unstaged vẫn có sẵn nếu bạn cuộn đến nơi bạn đã chạy các lệnh git đã nói ở trên.


0

Anh bạn

giả sử bạn là một người rất may mắn giống như tôi đã từng, quay lại trình chỉnh sửa của bạn và thực hiện hoàn tác (lệnh + Z cho mac), bạn sẽ thấy nội dung bị mất của mình trong tệp. Hy vọng nó sẽ giúp bạn. Tất nhiên, điều này sẽ chỉ làm việc cho các tập tin hiện có.


-1

Có thể những thay đổi của bạn không bị mất. Kiểm tra "git reflog"

Tôi trích dẫn bài viết dưới đây:

"Về cơ bản mọi hành động bạn thực hiện bên trong Git nơi lưu trữ dữ liệu, bạn có thể tìm thấy nó bên trong reflog. Git cố gắng hết sức để không làm mất dữ liệu của bạn, vì vậy nếu vì lý do nào đó bạn nghĩ rằng nó có thể, bạn có thể khai thác nó sử dụng git reflog "

Xem chi tiết:

http: // git yet.com/inter Ngay / 2009/02/09 / reflog-your-safe-net.html


3
Đừng hy vọng - hãy tải lại chỉ giúp nếu bạn tương tác với git một cách có ý nghĩa. Chỉ cần chỉnh sửa một tập tin, sau đó thổi nó đi qua kiểm tra git? git không bao giờ có cơ hội.
Bob Gilmore

1
+1 từ tôi - Nghĩ rằng nó đáng để đề cập git reflogở đây, tôi đã tìm thấy câu trả lời này khi tôi đang tìm cách hoàn tác git checkout HEAD .- Tôi đã định gõ git reset HEAD .- Tôi vừa thực hiện một 'git reset --soft Head ~ 1' và không biết về việc git reflognày đã có thể lấy lại công việc tôi đã làm :)
Russell England

1
Thật không may, git checkout <revision> và git checkout <path> là hai lệnh hoàn toàn khác nhau và không liên quan. Cái trước giữ những thay đổi cục bộ của bạn, cái sau thì không.
Hồ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.