Đang cố gắng kéo các tệp từ kho lưu trữ Github của tôi: từ chối hợp nhất các lịch sử không liên quan


151

Tôi đang học git và tôi đang theo dõi cuốn sách cộng đồng Git.

Trước đây (cách đây rất lâu) tôi đã tạo một kho lưu trữ công khai trên Github, với một số tệp. Bây giờ tôi đã thiết lập một kho lưu trữ Git cục bộ trên máy tính hiện tại của mình và cam kết một số tệp. Sau đó, tôi đã thêm một điều khiển từ xa trỏ đến trang Github của tôi:

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

Điều đó dường như thành công:

[root@osboxes c]# git remote show learnc
* remote learnc
  Fetch URL: https://github.com/michaelklachko/Learning-C
  Push  URL: https://github.com/michaelklachko/Learning-C
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (local out of date)

Bây giờ tôi muốn tải các tệp từ repo Github của tôi về máy tính của tôi. Tôi đã làm điều này:

[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.

Tuy nhiên, tôi không thấy bất kỳ tập tin mới trong thư mục địa phương của tôi. Làm thế nào tôi có thể nhận được chúng?

Tôi cũng đã cố gắng để làm điều này:

[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

BTW, tại địa phương tôi đang ở chi nhánh chính (không có chi nhánh nào khác):

[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean

4
Khi bạn thiết lập repo cục bộ, bạn đã sao chép repo Github của mình hay vừa mới làm git init? Trong trường hợp sau, các repos đó không liên quan (không có cam kết chung) và bạn không thể hợp nhất chúng (pull là fetch + merge).
Paul

Tôi đã git init. Vậy tôi có nên sao chép repo Github của mình để sửa lỗi này không?
MichaelSB

1
Bạn có thể sao chép repo Github của mình và tiếp tục làm việc với nó, nhưng nó vẫn sẽ là repo riêng. Bạn có muốn hợp nhất hai lịch sử không liên quan với nhau?
Paul

Tôi đoán tôi muốn hợp nhất lịch sử, nhưng thực sự tôi chỉ muốn kết hợp các tệp cả cục bộ và trên github. Ý tôi là tôi không thực sự quan tâm đến lịch sử của các tệp cũ tôi có trên Github.
MichaelSB

Câu trả lời:


315

Thử --allow-unrelated-histories

Giống như max630 đã nhận xét hoặc như được giải thích ở đây Git từ chối hợp nhất các lịch sử không liên quan


1
như đã lưu ý trên các ghi chú phát hành github
systemaddict

Tại sao không có tùy chọn cấu hình để luôn thiết lập điều này? Mỗi lần tôi phải săn lùng lựa chọn này; Tôi làm việc với git từ 2k8 và hoàn toàn khó chịu vì em bé này ngồi. Lựa chọn ngu ngốc không phải lúc nào cũng ở đó. Ít nhất là tin nhắn từ chối nên bao gồm ghi đè để sử dụng.
nyov

98
git checkout master
git merge origin/master --allow-unrelated-histories

Giải quyết xung đột, sau đó

git add -A .
git commit -m "Upload"
git push

1
Cảm ơn đã xây dựng các giải pháp trên.
Rahul Raj

39

Mặc dù tôi là tất cả để bỏ chặn các vấn đề công việc của mọi người, tôi không nghĩ rằng "lực đẩy" hoặc "--allow_unrelated_histories" nên được dạy cho người dùng mới dưới dạng giải pháp chung vì họ có thể gây ra sự tàn phá thực sự cho kho lưu trữ khi một người sử dụng chúng mà không hiểu tại sao mọi thứ không hoạt động ở nơi đầu tiên.

Khi bạn gặp tình huống như thế này khi bạn bắt đầu với một kho lưu trữ cục bộ và muốn tạo một điều khiển từ xa trên GitHub để chia sẻ công việc của bạn, có một điều cần chú ý.

Khi bạn tạo kho lưu trữ trực tuyến mới, sẽ có tùy chọn "Khởi tạo kho lưu trữ này bằng README". Nếu bạn đọc bản in đẹp, nó sẽ ghi "Bỏ qua bước này nếu bạn đang nhập một kho lưu trữ hiện có."

Bạn có thể đã kiểm tra hộp đó. Hoặc tương tự, bạn đã thực hiện thêm / cam kết trực tuyến trước khi bạn thử đẩy lần đầu. Điều gì xảy ra là bạn tạo một lịch sử cam kết duy nhất ở mỗi nơi và chúng không thể được hòa giải nếu không có phụ cấp đặc biệt được đề cập trong câu trả lời của Nevermore (vì git không muốn bạn vận hành theo cách đó). Bạn có thể làm theo một số lời khuyên được đề cập ở đây, hoặc đơn giản hơn là đừng kiểm tra tùy chọn đó vào lần tới khi bạn muốn liên kết một số tệp cục bộ với một điều khiển từ xa hoàn toàn mới; giữ từ xa sạch sẽ cho lần đẩy ban đầu đó.

Tham khảo: trải nghiệm đầu tiên của tôi với git + hub là gặp phải vấn đề tương tự và học hỏi rất nhiều để hiểu chuyện gì đã xảy ra và tại sao.


12

Nếu không có lịch sử đáng kể ở một đầu (hay nếu nó chỉ là một cam kết readme duy nhất ở đầu github), tôi thường thấy sao chép thủ công readme vào repo cục bộ của mình một cách dễ dàng hơn và thực hiện git push -fđể biến phiên bản của tôi thành cam kết gốc mới .

Tôi thấy nó hơi phức tạp một chút, không yêu cầu ghi nhớ một lá cờ tối nghĩa và giữ cho lịch sử sạch hơn một chút.


11

Trên nhánh của bạn - nói chủ, kéo và cho phép lịch sử không liên quan

git pull origin master --allow-unrelated-histories

Đã làm cho tôi.


1
Lệnh này là lệnh bạn cần đồng ý để thêm Giấy phép hoặc ReadMe khi tạo repo gốc trong Github.
F1Linux

4

Thực hiện lệnh sau:

git pull origin master --allow-unrelated-histories

Một vim hợp nhất sẽ mở ra. Thêm một số tin nhắn hợp nhất và:

  1. Nhấn ESC
  2. Nhấn Shift + ';'
  3. Nhấn 'w' và sau đó nhấn 'q'.

Và bạn tốt để đi.


3

Khi tôi sử dụng --allow-unrelated-histories, lệnh này tạo ra quá nhiều xung đột. Có những xung đột trong các tập tin mà tôi thậm chí không làm việc. Để khắc phục lỗi " Refusing to merge unrelated histories", tôi đã sử dụng lệnh rebase sau đây:

git pull --rebase=preserve --allow-unrelated-histories

Sau khi cam kết, những thay đổi không được cam kết với một thông điệp cam kết. Cuối cùng, chạy lệnh sau:

git rebase --continue

Sau này, bản sao làm việc của tôi đã được cập nhật với bản sao từ xa và tôi đã có thể đẩy các thay đổi của mình như trước đây. Không có lỗi lịch sử không liên quan trong khi kéo.


1
Phiên bản thực tế: git pull --rebase=merge --allow-unrelated-historiesnhư --rebase=preservebị phản đối git-scm.com/docs/git-pull#Documentation/ Kẻ
Luckylooke

0

Trong trường hợp của tôi đã phải đối mặt với cùng một vấn đề, đặc biệt là yêu cầu kéo đầu tiên thử sau khi thêm từ xa một kho lưu trữ Git. Các lỗi sau đây đã phải đối mặt.

fatal: refusing to merge unrelated histories on every try

Sử dụng lệnh --allow-không liên quan đến lịch sử. Nó hoạt động hoàn hảo.

git pull origin branchname --allow-unrelated-histories
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.