2015-08-12 9 views
16

A volte quando si tenta di unire la forcella testa nella mia forcella di base, o la forchetta di base nella forcella testa, ottengo il seguente messaggio su GitHub:GitHub "non può unire automaticamente"?

"Non è possibile unire automaticamente Non si preoccupi. , puoi ancora creare la richiesta di pull. "

Come visualizzare i conflitti, se ce ne sono per questo?

Ho letto circa 10 esempi diversi con vari comandi, ma non posso dire a cosa si riferiscono i nomi negli esempi nella mia situazione, poiché esistono nomi diversi per basi, forchette, rami, ecc.

Dopo tutto ciò, non posso credere che non ci sia un comando che puoi digitare per vedere i conflitti, modificare i conflitti e andare avanti con la fusione. Se c'è, non l'ho ancora trovato.

risposta

18

Ciò significa che la richiesta pull non può essere unita nell'upstream senza che i proprietari dell'upstream debbano risolvere i conflitti di unione.

La risoluzione qui sarebbe per voi di eseguire un recupero dall'upstream e quindi risolvere i conflitti di unione dall'upstream. A questo punto, se teoricamente risolvi i conflitti dall'upstream e poi crei la tua richiesta pull, upstream sarebbe in grado di unire automaticamente la tua richiesta pull senza conflitti (a patto che non ci siano stati commit sull'upstream tra la risoluzione locale dell'upstream unire conflitti e unirli in locale/fork e quindi creare la richiesta pull).

Utilizziamo qui GitHub come esempio per il negozio di repository remoto.

OriginalAccount \ repo1 - dire che questo è il repository originale (si farà riferimento a questo come "a monte")

accountpersonale \ repo1 - questo sarebbe la vostra forza del repository (questo è in genere il "origine" a distanza)

repo1locale - questa è la vostra copia locale del repository.

Quando si crea una richiesta di pull da accountpersonale \ repo1 a OriginalAccount \ repo1 (praticamente da origine-monte), avendo il messaggio che non si può unire automaticamente significa che OriginalAccount \ repo1 ha commesso il fatto che YourAccount \ repo1 non ha (commit che sono stati probabilmente spinti dopo che si è forato).

La soluzione qui sarebbe per andare a prendere da monte al repository locale (da OriginalAccount \ repo1 al repo locale) e risolvere eventuali conflitti di fusione a livello locale. Quindi invia il tuo commit a YourAccount \ repo1. A questo punto, dovresti essere in grado di creare la tua richiesta di pull che dovrebbe essere automaticamente unita a Account originale \ repo1.

Nota: Anche se la maggior parte dei servizi di Git non vi impedirà di proseguire con una richiesta di pull che richiede i contribuenti a monte per risolvere i conflitti di fusione, è buona norma e buona etichetta per assicurarsi che la richiesta di pull si fonde senza conflitto. Pensaci in questo modo, dovresti svolgere il lavoro di risoluzione dei conflitti di unione, invece di fare in modo che i contributori a monte eseguano tale lavoro dal tuo contributo.

+1

Non so nemmeno cosa significhi "risolvere i conflitti dall'upstream e quindi creare la richiesta pull" – user2568374

+0

@ user2568374 Ho appena modificato un esempio illustrativo. Spero che questo chiarisca ogni confusione. –

+0

Perso. Questo può essere fatto con Github? Ho provato a trascinare la biforcazione a sinistra per unire il quadrato e il mio ramo a destra unire il quadrato e fare clic su unire i rami e la sincronizzazione, ma ciò non risolve il problema. – user2568374

0

Si verificano conflitti quando il codice che viene unito al repository entra in conflitto con il codice già presente. Se la richiesta di pull è accettata, spetterà al gestore di repository risolverli.

+1

cos'è un gestore di repository? – user2568374

1

Il modo più semplice per fare questo, e per il loro modo, mi meritano $ 1 da tutti coloro che trova questo utile, è quello di utilizzare Github questo modo:

In Github selezionare la scheda rami, fare clic sul pulsante vista unire, trascinare il diriga la forchetta alla scatola di sinistra, trascini la tua forcella di base nella scatola di destra. Fare clic sul pulsante Unisci rami. Seleziona la scheda cambia. Seleziona ogni file con conflitti. vedere < < < < < < < ' Modificare i file nel visualizzatore esterno per mantenere il codice del capo e aggiungervi il proprio. Fare clic su Salva su file. Fare clic sul pulsante Conferma a. Fare clic su sincronizzazione. Visitare il sito Web Git e provare a unire nuovamente il fork della base con la testa forchetta. Non dovrebbe più mostrare il messaggio originale

+0

da quando ho aggiunto questo, Github ha cambiato la loro interfaccia. Il concetto dovrebbe essere lo stesso però. Si aggiornerà con una nuova soluzione per la nuova interfaccia quando avrò di nuovo questo problema – user2568374