2012-01-27 35 views
17

Tôi đã kiểm tra một chi nhánh khác có cập nhật rồi thực hiện một vài thay đổi, chuyển trở lại git chính và bây giờ các thay đổi đã biến mất! Tôi có thể lấy lại chúng không? nhà ga đã được cơ bản:Cách khôi phục cam kết từ 'trạng thái đầu bị tách rời'?

$ git commit 
[detached HEAD 7c09e17] Fixed some stuff 
    files changed, insertions(+), deletions(-) 
$ git push master 
fatal: 'master' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
$ git checkout master 
Previous HEAD position was 7c09e17... Fixed some stuff 
Switched to branch 'master' 
$ git merge theother/directory 
+0

dup của http://stackoverflow.com/questions/4845505/gitx-how-do-i-get-my-detached-head-commits-back-into-master? – smparkes

Trả lời

30

Giả sử bạn vẫn trên tổng thể:

git merge 7c09e17 

nên là đủ. git thường tốt về việc cho bạn biết ID cam kết, nếu bạn xem thiết bị đầu cuối.

+0

checkout master, git merge 7c09e17, git checkout master, git push, dường như giải quyết nó, cảm ơn! – NoBugs

+0

và, ngoài sự tò mò, có cách nào để xem/hủy tất cả các cam kết này trên máy cục bộ của tôi không? – NoBugs

+8

@NoBugs, nếu bạn muốn xem tất cả các cam kết lơ lửng (cam kết không phải trên một nhánh), tôi nghĩ bạn muốn 'git fsck --unreachable --no-reflogs'. –

7

Tôi gặp sự cố tương tự. Tôi tìm thấy git reflog để trở thành người tiết kiệm cuộc sống. Trong trường hợp nó giúp minh họa cho nó sử dụng, đây là kết quả:

e3191c5 [email protected]{0}: checkout: moving from ec31ccf0735240d0cdc5a44fd443039c3caa43f0 to master 
ec31ccf [email protected]{1}: commit: Added code and data for simulation. 
781b9ee [email protected]{2}: checkout: moving from 3bd804e635b913840c71b7f8a33665460580d45f to 781b 
3bd804e [email protected]{3}: checkout: moving from master to 3bd804 

tình hình của tôi là một chút khác nhau trong đó tôi đã thực hiện một cam kết trong khi ở trạng thái ĐẦU tách ra bắt đầu từ một rất cũ cam kết.

Nếu tôi chỉ đơn giản là muốn hợp nhất ec31ccf0735240d0cdc5a44fd443039c3caa43f0 (aka ec31ccf, đó là nơi tôi được) vào master, tôi nghĩ git merge ec31ccf hoặc git rebase ec31ccf có thể đã làm việc. Nhưng điều này sẽ chủ yếu là sáp nhập lịch sử cổ đại trong trường hợp của tôi (với xung đột hợp nhất, v.v.).

Thay vào đó, tôi chỉ muốn khôi phục những gì tôi đã thực hiện trên ec31ccfgit cherry-pick ec31ccf hoạt động tốt.

Các vấn đề liên quan