Намагаючись витягнути файли з мого сховища Github: "відмова від об'єднання пов'язаних історій"


151

Я вчу git, і я стежу за книгою спільноти Git.

Раніше (давно) я зробив публічний сховище на Github, з деякими файлами. Тепер я створив локальне сховище Git на своєму поточному комп’ютері та здійснив деякі файли. Потім я додав віддалену вказівку до своєї сторінки Github:

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

Це здавалося успішним:

[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)

Тепер я хочу завантажити файли з мого репоту Github на свій комп’ютер. Я зробив це:

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

Однак я не бачу нових файлів у своєму локальному каталозі. Як я можу їх отримати?

Я також намагався це зробити:

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

До речі, локально я перебуваю на головній гілці (інших гілок немає):

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

4
Коли ви створили місцеве репо, чи клонували ви рето Github чи просто зробили це git init? В останньому випадку ці репозиції не пов'язані між собою (не мають загальних комісій), і ви не можете їх об'єднати (потяг - це витяг + злиття).
Пол

Я зробив git init. Тож чи мушу я клонувати моє репо Github, щоб виправити це?
MichaelSB

1
Ви можете клонувати рето Github і продовжувати роботу з ним, але це все одно буде окремим репо. Ви хочете об'єднати дві неспоріднені історії разом?
Пол

Я думаю, я хочу об'єднати історії, але насправді я просто хочу комбінувати файли як локально, так і на github. Я маю на увазі, що я не дуже переймаюся історією старих файлів у Github.
MichaelSB

Відповіді:


315

Спробуйте --allow-unrelated-histories

Як коментує max630, або як пояснено тут, Git відмовляється об'єднати споріднені історії



Чому не існує параметра конфігурації, щоб завжди встановити це? Кожен раз, коли мені доводиться шукати цей варіант; Я працюю з git з 2k8 і сильно роздратований цим дитячим сидінням. Дурного варіанту не завжди було. Принаймні повідомлення про відмову має містити переопрацювання на використання.
nyov

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

Вирішіть конфлікт

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

1
Дякуємо за розробку вищезазначеного рішення.
Рахул Радж

39

Хоча я все для розблокування проблем роботи людей, я не думаю, що "push --force" або "--allow_unrelated_histories" не слід навчати нових користувачів як загальні рішення, оскільки вони можуть спричинити справжній хаос для сховища, коли хтось використовує їх не розуміючи, чому справи не працюють в першу чергу.

Коли у вас є така ситуація, коли ви розпочали роботу з локальним сховищем, і хочете зробити пульт дистанційного доступу на GitHub, щоб поділитися своєю роботою, є на що слідкувати.

Під час створення нового онлайн-сховища є опція "Ініціалізувати це сховище README". Якщо ви читаєте тонкий шрифт, він говорить "Пропустіть цей крок, якщо ви імпортуєте наявне сховище".

Можливо, ви поставили цей прапорець. Або подібним чином ви зробили додавання / фіксацію в Інтернеті, перш ніж спробувати первинний поштовх. Що трапляється, ви створюєте унікальну історію фіксації в кожному місці, і їх неможливо узгодити без спеціальних надбавок, зазначених у відповіді Nevermore (адже git не хоче, щоб ви працювали таким чином). Ви можете дотримуватися деяких порад, згаданих тут, або, просто, просто не перевіряйте цю опцію наступного разу, коли ви хочете зв’язати деякі локальні файли з абсолютно новим дистанційним; підтримуючи пульт чистого для цього початкового поштовху.

Довідка: мій перший досвід роботи з git + hub полягав у тому, щоб зіткнутися з цією самою проблемою і багато навчитися розуміти, що сталося і чому.


12

Якщо на одному кінці немає істотної історії (ака, якщо це лише одна команда readme на кінці github), мені часто простіше скопіювати readme вручну на моє місцеве репо, і зробити це, git push -fщоб зробити мою версію новою кореневою фіксацією .

Я вважаю, що це трохи менш складно, не вимагає запам’ятовування незрозумілого прапора, а історія тримається трохи чистіше.


11

На своїй гілці - скажіть майстер, витягніть і дозвольте пов'язані між собою історії

git pull origin master --allow-unrelated-histories

Працювали для мене.


1
Ця команда потрібна, щоб домовитись про те, щоб додати ліцензію чи ReadMe під час створення репо-джерела у Github.
F1Linux

4

Виконайте таку команду:

git pull origin master --allow-unrelated-histories

Відкриється vim для об'єднання. Додайте кілька об’єднаних повідомлень і:

  1. Натисніть ESC
  2. Натисніть Shift + ';'
  3. Натисніть "w", а потім натисніть "q".

І вам добре піти.


3

Коли я використовував --allow-unrelated-histories, ця команда породила занадто багато конфліктів. У файлах були конфлікти, над якими я навіть не працював. Для подолання помилки " Refusing to merge unrelated histories"я використав таку команду rebase:

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

Після цього виконайте невідомі зміни із повідомленням про фіксацію. Нарешті, запустіть таку команду:

git rebase --continue

Після цього моя робоча копія була в курсі віддаленої копії, і я зміг підштовхнути свої зміни, як і раніше. Більше не пов’язаних між собою помилок історії під час тягнення.


1
Фактична версія: git pull --rebase=merge --allow-unrelated-historiesяк --rebase=preserveзастарілий git-scm.com/docs/git-pull#Documentation/…
Luckylooke

0

У моєму випадку зіткнулася з тією ж проблемою, особливо перший запит на тягу після спроби віддаленого додавання репозиторію Git. Виникла наступна помилка.

fatal: refusing to merge unrelated histories on every try

Використовуйте команду --allow - Незалежно-історії. Це прекрасно працює.

git pull origin branchname --allow-unrelated-histories
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.