2016-09-29 13 views
11

Tôi đưa ra một vấn đề về git push. Nó hoạt động thành công trước đây, nhưng không thành công lần này. Ban đầu, tôi đang ở bậc thầy của tôi MINGW64 /d/javasoft/apache-tomcat-7.0.70/webapps/MyNote (master) , và sau đó,"từ chối hợp nhất lịch sử không liên quan" trong khi đang cố gắng khôi phục kho lưu trữ

  • tôi sử dụng git remote add origin liên hệ nguồn gốc romote tôi, nhưng nó cảnh báo rằng fatal: remote origin already exists.
  • sau đó, tôi sử dụng git remote rm origin (Có người nói với tôi) , được rồi.
  • sau đó, tôi sử dụng lại git remote add origin https://github.com/***/***.git. Được rồi.
  • sau đó, tôi sử dụng git push -u origin master (Tôi đã thử git push origin master, nhưng tôi đã mất toàn bộ địa chỉ .git vì một số lý do trước đây, vì vậy tôi đoán đây có thể là lần đầu tiên đẩy và tôi nên thêm -u). NHƯNG, nó cảnh báo error: failed to push some refs to 'https://github.com/***/***.git'
  • sau đó, một người nào đó nói với tôi rằng tôi nên sử dụng git pull origin master trước khi tôi sử dụng push và tôi đã làm như vậy. NHƯNG, nó cảnh báo: fatal: refusing to merge unrelated histories.
  • Tôi đã tìm thấy một số câu trả lời trong Git refusing to merge unrelated histories, nhưng có vẻ như nó không hoạt động. Trong vấn đề của tôi, nó cảnh báo fatal: Couldn't find remote ref –allow-unrelated-histories

thực sự không biết làm thế nào để làm ... chỉ muốn đẩy ..

+0

Bạn đã thiết lập lý do tại sao lịch sử đã phân kỳ chưa? Bạn cần phải tìm hiểu xem địa phương và từ xa/nguồn gốc có cam kết trước mỗi khác, và điều này nếu như vậy, quyết định xem bạn sẽ hợp nhất hoặc rebase. – javabrett

+0

"Tôi đã mất toàn bộ địa phương của mình .git vì một lý do nào đó trước đây". Vậy bạn đã bắt đầu lịch sử mới chỉ với mã của mình chưa? Điều đó có thể giải thích những gì bạn thấy. – max630

+0

Về cơ bản, bạn chắc chắn ** không nên ** sử dụng cờ '-allow-unrelated-history 'trong trường hợp của bạn. Thay vào đó, bạn nên khôi phục lịch sử mã của mình, để cam kết cuối cùng từ lịch sử gốc bạn có trong mã của bạn là mã gốc, sau đó hợp nhất nên cung cấp kết quả chính xác – max630

Trả lời

49

Điều này không thể được trả lời ngay.

Warning: Bạn không nên sử dụng –allow-unrelated-histories cờ trừ khi bạn biết lịch sử không liên quan là gì và tôi chắc chắn bạn cần đến nó. Việc kiểm tra đã được giới thiệu chỉ để ngăn chặn thiên tai khi mọi người hợp nhất các dự án không liên quan do nhầm lẫn.

Theo như tôi hiểu, trong trường hợp của bạn đã xảy ra sau:

Bạn đã nhân bản một dự án tại một số điểm 1, và thực hiện một số phát triển đến điểm 2. Trong khi đó, dự án đã phát triển đến một số điểm 3.

enter image description here

Sau đó, bạn vì một lý do mất .git thư mục con địa phương của bạn - trong đó có tất cả lịch sử của bạn 1-2. Bạn quản lý để khôi phục lại trạng thái hiện tại mặc dù.

enter image description here

Nhưng bây giờ nó không có bất kỳ lịch sử - có vẻ như toàn bộ dự án đã xuất hiện ra khỏi hư không. Nếu bạn yêu cầu git để hợp nhất chúng, nó sẽ không thể nói các thay đổi của bạn ở đâu, vì vậy nó có thể thêm chúng vào dự án từ xa, theo như tôi hiểu nó sẽ chỉ báo cáo thêm/thêm xung đột lớn.

Bạn nên làm gì tại là để tìm lại có hành 1 từ lịch sử xa nơi bạn đã nhân bản vô tính các dự án (tôi giả sử bạn không kéo sau đó, nếu bạn đã làm thì bạn thay vì phải tìm kiếm các cam kết cuối cùng bạn đã kéo). Sau đó, bạn nên sửa đổi lịch sử của bạn để bắt đầu từ cam kết đó 1, sau đó git sẽ có thể hợp nhất chính xác (ví dụ như kéo).

Vì vậy, các bước (giả sử bạn đang ở trong bạn phục hồi cam kết mà không lịch sử):

  • ước tính mà là cam kết 1 bạn đã nhân bản vô tính từ như một số 1?, dựa trên cam kết thời gian ví dụ
  • chạy git diff _1?_..HEAD và đọc kỹ, đảm bảo rằng sự khác biệt chỉ chứa các chỉnh sửa mà bạn đã thực hiện. Nếu nó chứa nhiều hơn thì bạn nên chọn sai một chút 1? và cần phải điều chỉnh nó và lặp lại bước này
  • sau khi bạn đã tìm thấy cam kết 1, bạn nên đặt nó làm cha mẹ của bạn, git --reset --soft _1_, sau đó git commit.

enter image description here

Bây giờ có vẻ như bạn đã nhân bản vô tính từ 1, sau đó thực hiện một cam kết với tất cả các thay đổi của bạn. Tuy nhiên, lịch sử trung gian của bạn bị mất với thư mục cũ hơn .git, nhưng bây giờ bạn có thể chạy git pull - nó sẽ hợp nhất chính xác.

+2

Tôi thấy cần sử dụng cờ khi nhập kho lưu trữ hiện tại vào kho lưu trữ mới được tạo trong Github. – Rabiees

-3

Cố gắng cam kết những thay đổi để repo địa phương. trước khi đẩy chúng vào GITHUB. Nó có thể giải quyết vấn đề (tôi đã có một vấn đề tương tự).

+1

Vì SO muốn tôi giải thích -1 của tôi - "điều này hoàn toàn sai". – dfarrell07

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