Cercare di estrarre i file dal mio repository Github: "rifiutare di unire storie non correlate"


151

Sto imparando git e sto seguendo il libro della comunità Git.

In precedenza (molto tempo fa) ho creato un repository pubblico su Github, con alcuni file. Ora ho impostato un repository Git locale sul mio computer attuale e ho eseguito il commit di alcuni file. Quindi ho aggiunto un telecomando che punta alla mia pagina Github:

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

Sembrava avere successo:

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

Ora voglio scaricare i file dal mio repository Github sul mio computer. L'ho fatto:

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

Tuttavia, non vedo alcun nuovo file nella mia directory locale. Come posso ottenerli?

Ho anche provato a fare questo:

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

A proposito, localmente sono sul ramo principale (non ci sono altri rami):

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

4
Quando hai impostato il tuo repository locale, hai clonato il tuo repository Github o l'hai appena fatto git init? In quest'ultimo caso tali repository non sono correlati (non hanno commit comuni) e non è possibile unirli (pull is fetch + merge).
Paul

Ho fatto git init. Quindi dovrei clonare il mio repository Github per risolvere questo problema?
MichaelSB,

1
Puoi clonare il tuo repository Github e continuare a lavorarci, ma rimarrà comunque un repository separato. Vuoi unire insieme due storie non correlate?
Paul

Immagino di voler unire le storie, ma in realtà voglio solo combinare i file sia localmente che su github. Voglio dire, non mi interessa davvero la storia dei vecchi file che ho su Github.
MichaelSB,

Risposte:


315

Provare --allow-unrelated-histories

Come max630 commentato, o come spiegato qui, Git si rifiuta di unire storie non correlate



Perché non esiste un'opzione di configurazione per impostare sempre questo? Ogni volta che devo dare la caccia a questa opzione; Lavoro con git da 2k8 e sono totalmente infastidito da questo baby-sitter. L'opzione stupida non è sempre stata lì. Almeno il messaggio di rifiuto dovrebbe includere l'override da usare.
nyov,

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

Risolvi il conflitto, quindi

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

1
Grazie per aver elaborato la soluzione sopra.
Rahul Raj,

39

Mentre sono tutto per sbloccare i problemi di lavoro delle persone, non credo che "push --force" o "--allow_unrelated_histories" dovrebbero essere insegnati ai nuovi utenti come soluzioni generali perché possono causare un vero caos a un repository quando li si utilizza senza capire perché le cose non funzionano in primo luogo.

Quando hai una situazione come questa in cui hai iniziato con un repository locale e vuoi creare un telecomando su GitHub con cui condividere il tuo lavoro, c'è qualcosa a cui fare attenzione.

Quando crei il nuovo repository online, c'è un'opzione "Inizializza questo repository con un README". Se leggi la stampa fine, dice "Salta questo passaggio se stai importando un repository esistente."

Potresti aver spuntato quella casella. O allo stesso modo, hai effettuato un'aggiunta / commit online prima di tentare una spinta iniziale. Quello che succede è che crei una cronologia di commit unica in ogni luogo e non possono essere riconciliati senza la speciale indennità menzionata nella risposta di Nevermore (perché git non vuole che tu operi in quel modo). Puoi seguire alcuni dei consigli menzionati qui, o più semplicemente non selezionare questa opzione la prossima volta che vuoi collegare alcuni file locali a un telecomando nuovo di zecca; mantenendo pulito il telecomando per quella spinta iniziale.

Riferimento: la mia prima esperienza con git + hub è stata quella di imbattermi in questo stesso problema e di imparare molto a capire cosa era successo e perché.


12

Se non esiste una cronologia sostanziale su un'estremità (ovvero se si tratta di un solo commit readme sull'estremità github), trovo spesso più facile copiare manualmente il readme nel mio repository locale e fare un git push -fper rendere la mia versione il nuovo commit root .

Trovo che sia leggermente meno complicato, non richiede di ricordare una bandiera oscura e mantiene la storia un po 'più pulita.


11

Sul tuo ramo - dì maestro, tira e consenti storie non correlate

git pull origin master --allow-unrelated-histories

Ha funzionato per me.


1
Questo comando è quello che devi accettare per aggiungere una Licenza o Leggimi quando crei un repository di origine in Github.
F1Linux,

4

Eseguire il comando seguente:

git pull origin master --allow-unrelated-histories

Si aprirà una fusione vim. Aggiungi un messaggio di fusione e:

  1. Premere ESC
  2. Premi Maiusc + ';'
  3. Premere 'w' e quindi premere 'q'.

E sei a posto.


3

Quando l'ho usato --allow-unrelated-histories, questo comando ha generato troppi conflitti. Ci sono stati conflitti nei file su cui non ho nemmeno lavorato. Per superare l'errore " Refusing to merge unrelated histories", ho usato il seguente comando rebase:

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

Dopo questo commit le modifiche senza commit con un messaggio di commit. Infine, esegui il comando seguente:

git rebase --continue

Dopo questo, la mia copia di lavoro è stata aggiornata con la copia remota e sono stato in grado di inviare le mie modifiche come prima. Niente più errori storici non correlati durante il pull.


1
Versione attuale: git pull --rebase=merge --allow-unrelated-historiescome --rebase=preserveè obsoleto git-scm.com/docs/git-pull#Documentation/…
Luckylooke

0

Nel mio caso stava affrontando lo stesso problema, in particolare la prima richiesta pull che provava dopo aver aggiunto in remoto un repository Git. Si è verificato il seguente errore.

fatal: refusing to merge unrelated histories on every try

Utilizzare il comando --allow-unrelated-histories. Funziona perfettamente.

git pull origin branchname --allow-unrelated-histories
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.