Git: dường như đang ở trong khu vực (không có chi nhánh) và sau đó mất các thay đổi của tôi


11

Tôi đã cố gắng đẩy từ không gian làm việc Git của mình lên Github nhưng những thay đổi đã thêm và cam kết của tôi dường như không được tải lên.

Sau đó, thực hiện một "nhánh git" tôi đã nhận được một cái gì đó trông như thế này:

git branch
* (no branch)
  master

Ngu ngốc, tôi nghĩ rằng tôi có thể trở lại thành chủ

git checkout master

và bây giờ những thay đổi của tôi dường như đã biến mất. Chi nhánh chủ của tôi là khoảng một ngày tuổi. Và dường như không có cách nào để chuyển trở lại điều này (không có chi nhánh).

Là những thay đổi của tôi bị mất? Hoặc có cách nào để phục hồi chúng?

Câu trả lời:


13

Miễn là bạn chưa làm xong git gcthì bạn sẽ không mất gì cả. Tất cả những gì bạn cần làm là tìm lại nó :) Bạn nhận được gì với:

git reflog show

Điều đó sẽ cho bạn thấy những gì đã xảy ra và id của (các) nút bị thiếu.


2
Tôi sẽ làm git reflog mà không chỉ định chủ. Có thể có các cam kết không liên kết với một chi nhánh và trong trường hợp này, đó có thể là những gì đã xảy ra. Bạn có thể kiểm tra một cam kết vào một chi nhánh mới để nó có đường dẫn đến nó.
Jeff Ferland

Bạn nói đúng, có lẽ tốt hơn theo cách đó. Giả định của tôi từ câu hỏi đã được đưa ra cho chủ nhân của cam kết. Tôi đã cập nhật câu trả lời của mình.
CK.

Whew, cảm ơn! Tôi đã cam kết một khoản tiền lớn không có chi nhánh, sau đó chuyển sang chủ để hợp nhất nó vào ... và tham khảo của tôi là.
Pascal

Đã khá nhiều năm, nhưng tôi cũng nhảy vào chuyện này. Tôi quay trở lại chi nhánh, và đột nhiên, gặp sự cố. Tất cả 2 ngày làm việc của tôi (nghĩa là 8 giờ quảng cáo) đã biến mất. Cảm ơn bạn rất nhiều!
Falgantil

5

Câu trả lời trên là chính xác. Đây là những gì tôi đã làm:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0

"Ồ không!" Khoảnh khắc này là:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 là nhánh ẩn danh hiển thị dưới dạng (không có nhánh). Để quay lại với nó, chỉ cần thực hiện kiểm tra git và pseudobranch cũ của bạn được khôi phục.

Tôi khuyên bạn nên sao lưu kho git của bạn trước khi bạn vô tình gc nó, để yên tâm.


Đơn giản chỉ cần kiểm tra chi nhánh đã không làm việc cho tôi. Những thay đổi của tôi đã được thực hiện chính xác trong nhánh tính năng của tôi. Tôi vẫn không thể nhìn thấy chúng trong không gian làm việc của tôi. Tôi phải mất những thay đổi của mình theo một cách nào đó. Tuy nhiên, tôi có thể phục hồi các thay đổi của mình bằng cách thực hiện git reset --hard <commit-id>. Id xác nhận là mã số alpha trong cột đầu tiên của git reflog. Xem effectif.com/git/recovering-lost-git-commits .
Torsten

2
# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>

Trong số nhiều cách bao gồm cả danh sách rev, chỉ có fsck giúp tìm ra cam kết không chi nhánh. Cảm ơn rât nhiều.
temoto
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.