2012-02-19 39 views
6

Một ngày khác, tôi nâng cấp tiny_mce trong một dự án được kiểm soát phiên bản bằng git. Vào thời điểm đó, tôi đã thực hiện một nhánh git cho sự thay đổi và sáp nhập nó để làm chủ và xóa nhánh. Mọi thứ hoạt động tốt.Hành vi lạ lùng của git

Ngoài ra, tôi đã thay đổi repo từ xa thành một máy chủ khác và thay đổi tệp .git/config của mình. Nhưng tôi phát hiện ra rằng tôi đã phạm sai lầm như sau.

[remote "new_repo"] 
    url = ssh://[email protected]/~/path/to/myproject.git 
    fetch = +refs/heads/*:refs/remotes/new_repo/* 
[branch "master"] 
    remote = old_repo <= WRONG 
    merge = refs/heads/master 

Phải là remote = new_repo. Tôi sửa nó sau và nó có vẻ hoạt động tốt.

Nhưng sau đó, nếu tôi thực hiện "trạng thái git", các tệp tiny_mce cũ sẽ vượt qua tệp mới và chúng nằm trong danh sách đã thay đổi nhưng không được cam kết. Vì vậy, tôi phải "git reset --hard HEAD". Điều đó xảy ra trên bản sao khác của dự án của tôi (cũng được cập nhật qua git). Nhưng tôi không thể tái tạo nó. Dường như điều này xảy ra ngẫu nhiên. (Hoặc tôi chưa thể tìm thấy mẫu.)

Điều gì đang xảy ra và làm cách nào để khắc phục?

Dưới đây là tôi "git branch -a":

choir 
* master 
remotes/old_repo/master 
remotes/new_repo/master 

cập nhật và sửa lỗi:

Hóa ra là tiny_mce đá quý mà ứng dụng ray của tôi sử dụng sao chép tiny_mce cũ và ghi đè cái mới mỗi lần Tôi chạy "rake some_task". Tôi đã nâng cấp đá quý tiny_mce.

+0

Bạn bằng cách nào đó sẽ phá vỡ thư mục làm việc của bạn mọi lúc. Có lẽ đó là do tài liệu tham khảo cũ (hãy nhớ rằng chi nhánh git checkout có thể kiểm tra các chi nhánh từ xa quá!). Bạn có thể mô tả đầu ra của lệnh git branch -a không? –

+0

@AlexandrPriymak Tôi đã chỉnh sửa câu hỏi của mình để thêm "git branch -a". Cảm ơn. –

+0

Gần đây bạn có xóa nhánh chính cục bộ và sau đó chỉ cần 'git checkout master'? –

Trả lời

1
  1. remotes/old_repo/master là kết quả của việc đổi tên thủ công của bạn. Trong tương lai, thích git remote rename hoặc thậm chí chỉ cần git remote set-url để cập nhật điều khiển từ xa của bạn và nó sẽ dọn sạch tất cả những thứ này cho bạn.

    Dọn dẹp sau khi thực tế là một cơn đau; git remote prune là vụ phải đối phó với những vấn đề này, nhưng từ chối làm như vậy nếu từ xa đã mất tích. git branch -dr old_repo/master?

  2. git reset --hard HEAD sẽ làm rất ít nếu HEAD của bạn sai.

    Kiểm tra với git symbolic-ref HEAD hoặc chỉ cat .git/HEAD hoặc thậm chí tốt hơn, chạy git branch -avv. Chúng sẽ cho bạn biết vị trí của bạn là HEAD.

    Có thể là chỉ tại old_repo/master thay vì new_repo/master? Nếu có, bạn có thể (giả sử bạn nhận thức được những gì reset --hard thực hiện với các thay đổi không được cam kết của bạn), git reset --hard new_repo/master và không bao giờ nói lại điều này.

+0

Tôi có dùng một trong hai hoặc cả hai? Dù sao, "git branch -avv" hiện tại như thế này.choir 3a57351 ghi đè tiny_mce * master 9c313f3 [ps_git/master] Xóa a.txt điều khiển từ xa/codepremise/master 974b657 Nâng cấp tiny_mce điều khiển từ xa/ps_git/master 9c313f3 Xóa tệp a.txt –