Saturday 9 September 2017

Git Merge Conflitto Binarie Options


È possibile risolvere i conflitti unire utilizzando la riga di comando e un editor di testo. Unisci conflitti possono verificarsi se vengono apportate modifiche in competizione per la stessa linea di un file o quando un file viene cancellato che un'altra persona sta tentando di modificare. Per informazioni su come risolvere queste situazioni, vedi Competere cambiare linea unire i conflitti e file rimosso unire i conflitti. Competere cambiare linea di unire i conflitti per risolvere un conflitto di unione causata da concorrenti cambi di line, è necessario scegliere che cambia di incorporare dalle diverse filiali in un nuovo impegno. Ad esempio, se si e un'altra persona sia modificato il file styleguide. md sulle stesse linee in diversi rami della stessa repository Git, youll ottenere un errore di fusione conflitto quando si tenta di unire questi rami. È necessario risolvere il conflitto di unione con un nuovo commit prima di poter unire questi rami. Apri Terminale Terminal Git Bash. Navigare nel repository Git locale che ha il conflitto di unione. Genera un elenco dei file colpite dal conflitto di unione. In questo esempio, il file styleguide. md ha un conflitto di unione. Aprite il vostro editor di testo preferito, come ad esempio Atom. e selezionare il file che ha fondersi conflitti. Per vedere l'inizio del conflitto di unione nel file, cercare il file per la ltltltltltltlt marcatore conflitto. Quando si apre il file con un editor di testo, vedere youll i cambiamenti dal ramo testa o di base dopo la testa linea di ltltltltltltlt. Successivamente, youll vedere. che divide le modifiche dei cambiamenti nel ramo, seguiti da gtgtgtgtgtgtgt FILIALE-NAME. In questo esempio, una persona ha scritto un problema aperto nella base o il ramo HEAD e un'altra persona ha scritto per chiarire eventuali dubbi in IRC nel ramo confrontare o ramo-a. Decidere se si desidera mantenere solo i tuoi Branchs modifiche, tenere solo gli altri Branchs modifiche, o fare un nuovo cambiamento, che può incorporare le modifiche da entrambi i rami. Eliminare il ltltltltltltlt marcatori di conflitto. . gtgtgtgtgtgtgt e apportare le modifiche desiderate nell'unione finale. In questo esempio, entrambe le modifiche sono incorporati l'unione finale: Aggiungi o stadio le modifiche. Commit le modifiche con un commento. A questo punto è possibile unire i rami sulla linea di comando o spingere le modifiche al tuo repository remoto su GitHub e unire le modifiche in una richiesta di pull. File Rimosso unire i conflitti Per risolvere un conflitto di unione causato da modifiche a un file, in cui una persona cancella un file in un ramo e un'altra persona modifica lo stesso file in competizione, è necessario scegliere se cancellare o mantenere il file rimossi in un nuovo impegno. Ad esempio, se si è modificato un file, ad esempio README. md. e un'altra persona rimosso lo stesso file in un altro ramo della stessa repository Git, youll ottenere un errore di fusione conflitto quando si tenta di unire questi rami. È necessario risolvere il conflitto di unione con un nuovo commit prima di poter unire questi rami. Apri Terminale Terminal Git Bash. Navigare nel repository Git locale che ha il conflitto di unione. Genera un elenco dei file colpite dal conflitto di unione. In questo esempio, il file README. md ha un conflitto di unione. Aprite il vostro editor di testo preferito, come ad esempio Atom. e selezionare il file che ha fondersi conflitti. Decidere se si desidera conservare il file eliminato. Si consiglia di visualizzare le ultime modifiche apportate al file rimosso con un editor di testo. Per aggiungere il file rimosso di nuovo al vostro repository: Per rimuovere il file dal repository: commit le modifiche con un commento. A questo punto è possibile unire i rami sulla linea di comando o spingere le modifiche al tuo repository remoto su GitHub e unire le modifiche in una richiesta di pull. Ulteriori readingTry: git mergetool Si apre una GUI che si passi attraverso ogni conflitto, e si arriva a scegliere come unire. A volte richiede un po 'di editing mano dopo, ma di solito la sua abbastanza da sola. E 'molto meglio che fare il tutto a mano certamente. Come da commento JoshGlover: per la squadra di comando necessariamente aprire una GUI a meno che non si installa uno. Esecuzione mergetool git per me ha provocato vimdiff in uso. È possibile installare uno dei seguenti strumenti da utilizzare invece: fondere. opendiff. KDiff3. tkdiff. xxdiff. TortoiseMerge. gvimdiff. diffondere. ECMerge. p4merge. araxis. vimdiff. emergere. Risposi 2 ottobre 08 alle 17:50 ho don39t capisco perché questa risposta ha ricevuto così tanti upvotes, è isn39t davvero molto utile in quanto contiene solo questo comando e assolutamente nessuna spiegazione come usarlo. Come altri hanno detto, ha aperto un vimdiff e anche se io so come usare vim (interruttore le finestre almeno o chiudere) I don39t nemmeno che cosa ciascuna finestra rappresenta né come confrontare o accettare le modifiche. It39s bello sapere che vi è una tale comando, ma senza alcuna spiegazione di come utilizzare o installare altri strumenti 3rd, it39s risposta inutile ndash Petr 10 marzo 14 a 13:48 Ecco un caso d'uso probabile, dall'alto: Youre che va a tirare alcuni cambiamenti, ma oops, non sei aggiornata: in modo da ottenere up-to-date e riprovare, ma hanno un conflitto: Così si decide di prendere uno sguardo ai cambiamenti: Oh me, oh mio, a monte cambiato alcune cose, ma solo per usare le mie modifiche. no. i loro cambiamenti. E allora proviamo un'ultima volta Ragazzi, quotoursquot e quottheirsquot è relativo a se o non si uniscono o rebasing. Se you39re la fusione. poi quotoursquot significa che il ramo you39re fusione in, e quottheirsquot è il ramo you39re fusione. Quando you39re rebasing. poi quotoursquot significa che le impegna you39re rebasing su, mentre quottheirsquot si riferisce ai commit che si desidera rebase. ndash user456814 26 Maggio 14 at 4:27 trovo unire strumenti raramente mi aiuta a capire il conflitto o la risoluzione. Im di solito più successo guardando i marcatori di conflitto in un editor di testo e l'utilizzo di log git come supplemento. Ecco alcuni suggerimenti: La cosa migliore che ho trovato è quello di utilizzare la fusione diff3 stile conflitto: git config merge. conflictstyle diff3 Questo produce marcatori di conflitto in questo modo: La sezione centrale è quello che l'antenato comune sembrava. Questo è utile perché è possibile confrontarlo con le versioni superiori e inferiori per ottenere un migliore senso di ciò che è stato cambiato su ogni ramo, che vi dà una migliore idea di ciò che lo scopo di ogni cambiamento è stato. Se il conflitto è solo poche righe, questo rende generalmente il conflitto molto evidente. (Saper risolvere un conflitto è molto diverso è necessario essere consapevoli di quello che gli altri stanno lavorando. Se siete confusi, la sua, probabilmente meglio chiamare solo quella persona nella vostra stanza in modo che possano vedere quello che stai guardando.) Se la il conflitto è più lungo, allora io tagliare e incollare ciascuna delle tre sezioni in tre file separati, come il mio, comuni e la loro. Allora posso eseguire i seguenti comandi per vedere i due tipi diff che ha causato il conflitto: Questo non è lo stesso che utilizzare uno strumento di unione, dal momento che un strumento di unione includerà tutti i non-conflittuali hunks diff troppo. Trovo che, per essere fonte di distrazione. Qualcuno ha già parlato di questo, ma capire l'intenzione dietro ogni pezzo diff è generalmente molto utile per capire dove un conflitto è venuto da e come gestirlo. Questa mostra tutti i commit che hanno toccato quel file tra l'antenato comune e le due teste si uniscono. (Quindi non comprende l'commit che già esistono in entrambi i rami prima della fusione). In questo modo si ignora hunk diff che chiaramente non sono un fattore nel conflitto in corso. Verificare le modifiche con strumenti automatizzati. Se avete test automatizzati, eseguire quelli. Se si dispone di un panno. eseguire tale. Se la sua un progetto edificabile, poi costruirlo prima di impegnarsi, ecc In tutti i casi, è necessario fare un po 'di test per assicurarsi che le modifiche didnt rompere nulla. (Heck, anche una fusione senza conflitti può rompere il codice di lavoro.) Pianificare in anticipo comunicare con i colleghi. Progetti per il futuro e di essere consapevoli di ciò che gli altri stanno lavorando su può aiutare a prevenire conflitti di fusione eo aiuto risolverli prima - mentre i dettagli sono ancora fresche nella mente. Ad esempio, se si sa che tu e un'altra persona sono entrambi lavorando su diversi refactoring che vi sia influenzare lo stesso insieme di file, si dovrebbe parlare tra di loro in anticipo e ottenere un migliore senso di ciò che tipi di cambiamenti ognuno di voi è making. Si potrebbe risparmiare molto tempo e fatica se condurre le modifiche previste in serie anziché in parallelo. Per maggiori refactoring che attraversano una grande fetta di codice, si dovrebbe prendere in seria considerazione di lavoro in serie: tutti smette di funzionare su quella zona del codice mentre una persona compie il refactoring completo. Se non potete lavorare in serie (a causa della pressione del tempo, forse), poi la comunicazione circa previsto fondono conflitti almeno ti aiuta a risolvere i problemi prima, mentre i dettagli sono ancora fresche nella mente. Ad esempio, se un collega sta facendo una serie dirompente di commit nel corso di un periodo di una settimana, si può scegliere di mergerebase su quel ramo collaboratori una o due volte al giorno durante la settimana. In questo modo, se si fa trovare conflitti mergerebase, è possibile risolvere più rapidamente che se si aspetta un paio di settimane di fondere tutto insieme in un unico grande grumo. Se siete sicuri di una fusione, Non forzarlo. La fusione può creare confusione, soprattutto quando ci sono un sacco di file in conflitto e dei marcatori di conflitto nuvolosa centinaia di linee. Spesso quando si stima progetti di software noi non includere il tempo sufficiente per gli elementi ambientali come la gestione di un merge nodoso, così ci si sente come un vero e trascinare per trascorrere diverse ore sezionare ogni conflitto. Nel lungo periodo, pianificazione per il futuro e di essere consapevoli di ciò che gli altri stanno lavorando sono i migliori strumenti per anticipare i conflitti di unione e prepararsi a risolvere correttamente in meno tempo. Identificare quali file sono in conflitto (Git dovrebbe dire questo). Aprire ogni file ed esaminare le diff Git li delimiti. Speriamo che sia evidente quale versione di ciascun blocco di mantenere. Potrebbe essere necessario discuterne con altri sviluppatori che hanno commesso il codice. Una volta che avete risolto il conflitto in un file git aggiungere thefile. Una volta che avete risolto tutti i conflitti, fare git rebase --continue o qualunque comando git detto di fare quando hai completato. Thulfir: chi ha parlato di fare un ramo lo stesso di un altro Ci sono diversi scenari in cui è necessario unire, senza quotmaking un ramo lo stesso anotherquot. Uno è quando you39re fatto con un ramo di sviluppo e desidera incorporare i suoi cambiamenti nel ramo master dopo questo, il ramo di sviluppo possono essere cancellati. Un altro è quando si vuole rebase vostro ramo di sviluppo, al fine di facilitare l'eventuale fusione finale nel master. ndash Teemu Leisti 21 settembre 12 alle 8:50 git JustinGrant aggiungere file fasi nell'indice non aggiunge nulla al repository. git commit aggiunge cose al repository. Questo utilizzo senso per le fusioni - l'unione in scena automaticamente tutte le modifiche che possono essere uniti automaticamente è vostra responsabilità di fondere il resto delle modifiche e aggiungere quelli per l'indice quando si è fatto. ndash mehaase 17 ottobre 12 in 15:13 Utilizzando quotgit addquot è il vero trucco qui. Si può anche non voler commettere (forse si vuole riporre), ma si deve fare addquot quotgit per completare la stampa. Credo che mergetool fa l'add per voi (anche se isn39t nella pagina man), ma se si fa il merge manualmente, è necessario utilizzare quotgit addquot per completarlo (anche se si don39t vuole impegnare). ndash Nobar 25 ottobre 10 presso 9:37 conflitti di unione che accade quando vengono apportate modifiche a un file allo stesso tempo. Ecco come risolverlo. Ecco i semplici passi cosa fare quando si entra in stato di conflitto: Nota l'elenco dei file in conflitto con: git status (ai sensi della sezione percorsi unmerged). Risolvere i conflitti separatamente per ogni file da uno dei seguenti approcci: usare GUI per risolvere i conflitti: git mergetool (il modo più semplice). Per accettare la versione remoteother, usare: PathFile git checkout --theirs. Questo rifiuterà tutte le modifiche locali che hai fatto per quel file. Per accettare la versione localour, uso: git checkout --ours PathFile Tuttavia youve stare attenti, come i cambiamenti remoti che i conflitti sono stati fatte per qualche motivo. Modificare i file in conflitto manualmente e cercare il blocco di codice tra ltltltltlt gtgtgtgtgt quindi scegliere la versione sia dall'alto o dal basso. Vedi: come i conflitti sono presentati. conflitti percorso e il nome possono essere risolti con git add git rm. Infine, rivedere i file pronti per impegnarsi con: git status. Se avete ancora tutti i file sotto percorsi non uniti. e hanno consentito di risolvere il conflitto manualmente, poi lasciare Git sapere che risolto da: git add PathFile. Se tutti i conflitti sono stati risolti con successo, il commit delle modifiche per: git commit - a e spingere a distanza, come al solito. Ive ha utilizzato con successo DiffMerge che può visivamente confrontare e unire i file su Windows, MacOS e LinuxUnix. Si può mostrare graficamente le modifiche tra 3 file e permette la fusione automatica (quando sicuro di farlo) e il pieno controllo sulla modifica del file risultante. Fonte immagine: DiffMerge (Linux screenshot) Basta scaricare ed eseguire in pronti contro termine come: su MacOS è possibile installare tramite: E probabilmente (se non in dotazione) è necessario il seguente semplice involucro in più inseriti nel vostro PATH (ad es usrbin): Poi si può utilizzare i seguenti tasti di scelta rapida: - Alt - Up Down per passare ai cambiamenti PrecedenteProssimo. - Alt - Destra Sinistra ad accettare il cambiamento da (parte di Xcode Tools) a sinistra oa destra alternativa è possibile utilizzare opendiff che consente di unire due file o directory insieme per creare un terzo file o una directory. Vedere come i conflitti vengono presentati o, in Git, la documentazione merge git per capire cosa si fondono marcatori di conflitto sono. Inoltre, la sezione Come risolvere i conflitti spiega come risolvere i conflitti: Dopo aver visto un conflitto, si possono fare due cose: decidere di non unire. Gli unici bonifiche avete bisogno sono a reimpostare il file di indice alla TESTA impegnarsi per invertire 2. e per ripulire lavorare modifiche albero fatto di 2. e 3. git merge --abort può essere utilizzato per questo. Risolvere i conflitti. Git segnerà i conflitti nella struttura di lavoro. Modificare i file in forma e git aggiungerli all'indice. Utilizzare git commit per sigillare l'affare. È possibile lavorare attraverso il conflitto con una serie di strumenti: Utilizzare un mergetool. git mergetool per lanciare un mergetool grafica che funziona attraverso l'unione. Guarda le diff. git diff mostrerà un diff a tre vie, mettendo in evidenza i cambiamenti sia dal HEAD e le versioni MERGEHEAD. Guarda le diff da ogni ramo. GIT log --merge - p ltpathgt mostrerà diff prima per la versione testa e poi la versione MERGEHEAD. Guarda gli originali. spettacolo git: 1: nome del file mostra l'antenato comune, git spettacolo: 2: il nome del file mostra la versione HEAD, e git spettacolo: 3: nome del file mostra la versione MERGEHEAD. Si può anche leggere su fondersi marcatori di conflitto e di come risolverli nella sezione Pro Git libro di base Unisci conflitti. Controllare lo stato git: git status Prendi il patchset: git fetch (checkout la patch direttamente dal tuo git commit) Acquista una filiale locale (temp1 nel mio esempio qui): git checkout - b temp1 Estrarre il contenuto recenti da maestro: git pull - maestro origine - rebase Avviare il mergetool e controllare i conflitti e correggerli. e controllare i cambiamenti nel ramo a distanza con il ramo corrente: git mergetool Controllare nuovamente lo stato: git status Elimina i file indesiderati localmente creati da mergetool, di solito mergetool crea extra file con l'estensione. orig. Si prega di eliminare il file come questo è solo il duplicato e correzione modifica a livello locale e aggiungere la versione corretta dei file. git add yourchangedcorrectfiles controllare lo stato di nuovo: git status confermare le modifiche allo stesso Commit ID (questo evita un nuovo set di patch separata): git commit Spingere --amend al ramo principale: git push (al repository git) Si potrebbe risolvere il problema unire conflitti in vari modi come altri hanno descritto. Credo che la vera chiave è sapere come i cambiamenti di flusso con repository locali e remoti. La chiave di questo è la comprensione di monitoraggio rami. Ho scoperto che penso del ramo di inseguimento non il pezzo mancante nel mezzo tra me mio, directory file effettivi locale e remota definito come origine. Ive ha ottenuto personalmente l'abitudine di 2 cose per contribuire ad evitare questo. Che ha due inconvenienti - a) Tutti i file newchanged vengono aggiunti e che potrebbero includere alcune modifiche indesiderate. b) non si ottengono per rivedere l'elenco di file prima. Così, invece che faccio: In questo modo si è più deliberata su cui vengono aggiunti i file e si ottiene anche a rivedere la lista e pensare un po 'di più mentre si utilizza l'editor per il messaggio. Trovo migliora anche i miei messaggi di commit quando uso un editor a tutto schermo, piuttosto che l'opzione - m. Aggiornamento - come il tempo è passato Ive acceso più a: anche (e più rilevanti per la vostra situazione), cerco di evitare: perché tirare implica una fusione e se si dispone di modifiche a livello locale che non ordinavi fusa si può facilmente finire con il codice di fusione andor unire i conflitti per il codice che sognerei sono state fuse. Invece io cerco di fare si può anche trovare questo utile: semplicemente, se si sa bene che i cambiamenti in uno dei repository non è importante, e desidera risolvere tutti i cambiamenti in favore dell'altro, in modo da utilizzare: per risolvere cambiamenti nel favore del proprio repository. o per risolvere i cambiamenti in favore dell'altro o il repository principale. Oppure si dovrà usare uno strumento grafico di unione per scorrere i file uno per uno, dire lo strumento di fusione è p4merge. o scrivere qualsiasi quelli citarne youve già installato e dopo aver terminato un file, si dovrà salvare e chiudere, in modo che il prossimo si aprirà risposto 26 Gennaio 16 anni al 17:42 git checkout. --theirs risolto il mio problema grazie ndash Ramesh Chand 10 marzo 16 al 06:53, se si preferisce risolvere i conflitti cercare manualmente aprendo la cartella in codice Visual Studio, segna i file con conflitti e colori le linee di conflitto all'interno di ognuno ndash Mohamed Selim 3 luglio 16 a 8:31 CoolAJ86s rispondere riassume praticamente tutto. Nel caso in cui si hanno variazioni di entrambi i rami dello stesso pezzo di codice che dovrà fare una fusione manuale. Aprire il file in conflitto in qualsiasi editor di testo e si dovrebbe vedere seguente struttura. Scegli una delle alternative o una combinazione di entrambi in un modo che si desidera nuovo codice sia, durante la rimozione di segni di uguale e parentesi angolari. Parlando di pullfetchmerge nelle risposte di cui sopra, vorrei condividere un trucco interessante e produttivo, git pull --rebase Questo comando sopra è il comando più utile nella mia vita git che ha salvato un sacco di tempo. Prima di spingere la modifica recentemente impegnata al server remoto, provare git tirare --rebase tiro piuttosto git e si fondono manuale e che verrà automaticamente sincronizzati ultime modifiche server remoto (con un recupero di fusione) e metterà la vostra ultima locale impegnarsi in alto a git log . Non c'è bisogno di preoccuparsi di pullmerge manuale. In caso di conflitto, proprio impiego non sembra funzionare sempre per me e di solito finisce la visualizzazione di ogni commit che era diverso tra i due rami, questo accade anche quando si utilizza - per separare il percorso dal comando. Quello che faccio per ovviare a questo problema è aprire due righe di comando e in una corsa e l'altra MERGEDINBRANCH sostituzione con il ramo ho fuso e percorso con il file che è in conflitto. Questo comando registrerà tutti i commit, in forma di patch, tra (.) Due commit. Se si lascia una parte vuota come nei comandi precedenti git utilizzerà automaticamente TESTA (il ramo si uniscono in in questo caso). Questo vi permetterà di vedere ciò che è andato impegna nel file nei due rami dopo che divergevano. Di solito rende molto più facile per risolvere i conflitti. risposto 11 dicembre 14 alle 15:19 ho sempre seguito le istruzioni riportate di seguito per evitare conflitti. maestro git checkout (Vieni al ramo master) git pull (Aggiorna il tuo padrone per ottenere il codice più recente) git checkout - b mybranch (checkout un nuovo un ramo e iniziare a lavorare su quel ramo in modo che il master rimane sempre superiore del tronco.) git add. E git commit E git push (sul ramo locale dopo le modifiche) maestro git checkout (torna al tuo padrone.) Ora si può fare lo stesso e mantenere il maggior numero di filiali locali che si desidera e lavorare simultaneamente il mio solo facendo un checkout git a la filiale quando mai necessario. risposto 12 febbraio 15 alle 4.25, se si desidera unire di ramo (test) per master, è possibile procedere come segue: Fase 1: andare al ramo Step2: git pull maestro origine --rebase Fase 3: se ci sono alcuni conflitti, andare a questi file per modificarlo. Fase 4: aggiungere questi cambiamenti Fase 5: git rebase --continue Step6: se c'è ancora un conflitto, tornare alla Fase 3 di nuovo. Se non vi è alcun conflitto, fare seguente: git push test di origine Step7: e allora non c'è alcun conflitto tra prova e padrone. è possibile utilizzare direttamente unione. Risposi 18 Agosto 14 at 19:42 Io voglio che il mio sia o la loro versione integrale, o voglio rivedere le singole modifiche e decidere per ciascuno di essi. Completamente accettare la mia o la versione loro: accettare la mia versione (locale, il nostro): accettare la loro versione (a distanza, la loro): Se si vuole fare per tutti i file di conflitto eseguiti: Rivedere tutte le modifiche e accettarle git singolarmente modifiche mergetool Review e accettare sia versione per ciascuno di essi. git add ltfilenamegt git commit - m fuse bla bla opere mergetool predefinito a riga di comando. Come utilizzare un mergetool riga di comando dovrebbe essere una questione a sé stante. È inoltre possibile installare strumento visivo per questo, ad esempio, fondono e gestito Si aprirà versione locale (la nostra), base o la versione fusa (il risultato corrente della fusione) e la versione a distanza (loro). Salvare la versione fusa quando si è finito, mergetool git eseguire - t fondersi di nuovo fino ad arrivare Nessun file da unire, poi andare ai punti 3. e 4. conflitti di unione potrebbe verificarsi in diverse situazioni: Quando si esegue git fetch e quindi git merge Quando esecuzione git fetch e quindi git rebase Quando si esegue git pull (che in realtà è uguale a una delle condizioni di cui sopra) Quando si esegue git scorta pop Quando sei l'applicazione di patch Git (commit che vengono esportati in file da trasferire ad es. via e-mail) è necessario installare uno strumento di unione che è compatibile con Git per risolvere i conflitti. Io personalmente uso KDiff3 e Ive trovato bello e pratico. È possibile scaricare la sua versione per Windows qui: BTW se si installa Git estensioni c'è un'opzione nella sua procedura di installazione guidata per installare KDiff3. Poi configurazioni di installazione git da utilizzare Kdiff come mergetool: (Ricordati di sostituire il percorso con il percorso effettivo del file. exe Kdiff.) Quindi ogni volta che vi imbattete in un conflitto di unione è sufficiente eseguire questo comando: Poi si apre il KDiff3, e il primo cerca di risolvere automaticamente i conflitti di unione. La maggior parte dei conflitti sarebbero stati risolti spontaneamente ed è necessario correggere il resto manualmente. Poi, una volta youre fatto, salvare il file e passa al file successivo con il conflitto e di fare la stessa cosa fino a quando tutti i conflitti sono risolti. Per controllare che tutto si fonde con successo, basta eseguire nuovamente il comando mergetool, si dovrebbe ottenere questo risultato: A partire dal 12 dicembre 2016, è possibile unire i rami e risolvere i conflitti su GitHub Quindi, se non volete utilizzare la riga di comando o qualsiasi strumenti 3rd party che vengono offerti qui dalle risposte più anziani. andare con GitHubs strumento nativo. Questo post del blog spiega in dettaglio, ma le basi sono che dopo la fusione di due rami tramite l'interfaccia utente, ora vedrete una opzione di risolvere i conflitti che vi porterà ad un editor che consente di affrontare questi conflitti si fondono. rispose 9 gennaio alle 19:45 questo non chiede su github così mi giù votato quello che io considero essere una risposta molto scarsa. ndash mschuett 25 gennaio a 5:06 grazie per me tenere sotto controllo, l'uomo. ndash Maxwell 26 gennaio alle 23:07 Utilizzando pazienza Im sorpresa che nessun altro ha parlato di risolvere i conflitti con la pazienza con la strategia ricorsiva unione. Per la grande conflitto di unione, con pazienza ha fornito buoni risultati per me. L'idea è che si cerca di far corrispondere i blocchi, piuttosto che singole linee. Se si modifica il rientro del programma, per esempio, la strategia di fusione git di default a volte partite singole bretelle dalla documentazione: Confronto con l'antenato comune Se si dispone di un conflitto di unione e volete vedere ciò che gli altri avevano in mente quando si modifica la loro filiale, la sua a volte più facile confrontare la loro filiale direttamente con l'antenato comune (invece del nostro ramo). Per questo è possibile utilizzare merge-base: Di solito, si desidera solo per vedere le modifiche per un particolare file: 7.8 Git Strumenti - Unione di avanzate di fusione avanzate di fusione in Git è in genere abbastanza facile. Poiché Git rende facile unire un altro ramo più volte, significa che si può avere un ramo molto vissuto a lungo, ma si può tenere aggiornati, come si va, risolvendo piccoli conflitti spesso, piuttosto che essere sorpresi da un enorme conflitto al fine della serie. Tuttavia, a volte si verificano conflitti difficili. A differenza di altri sistemi di controllo versione, Git non cerca di essere troppo intelligente sulla risoluzione dei conflitti di unione. La filosofia Gits è di essere intelligente su come determinare quando una risoluzione di fusione è inequivocabile, ma se c'è un conflitto, che non cerca di essere intelligente su come risolvere automaticamente. Pertanto, se si aspetta troppo tempo per unire due rami che divergono rapidamente, è possibile incorrere in alcuni problemi. In questa sezione, anche andare oltre quello che alcuni di questi problemi potrebbe essere e quali strumenti Git si dà per aiutare a gestire queste situazioni più difficili. Bene anche coprire alcuni dei diversi tipi, non-standard di fusioni che si possono fare, così come vedere come eseguire fuori di fusioni che avete fatto. Unisci conflitti Mentre abbiamo coperto alcune nozioni di base sulla risoluzione dei conflitti di fusione a conflitti di base di unione. per conflitti più complessi, Git fornisce alcuni strumenti per aiutare a capire cosa sta succedendo e come trattare meglio con il conflitto. Prima di tutto, se possibile, cercare di assicurarsi che la directory di lavoro sia pulito prima di fare una fusione che può avere conflitti. Se si dispone di lavori in corso, o impegnarsi ad un ramo temporaneo o riporre esso. Questo fa in modo che si può annullare qualsiasi cosa si prova qui. Se si dispone di modifiche non salvate nella directory di lavoro quando si tenta una fusione, alcuni di questi suggerimenti possono aiutare a perdere quel lavoro. Consente di camminare attraverso un esempio molto semplice. Abbiamo un super semplice file di Rubino che stampa ciao mondo. Nel nostro archivio, abbiamo creato una nuova filiale denominata spazi e procediamo a cambiare tutti i fine riga Unix a fine riga DOS, sostanzialmente cambiando ogni riga del file, ma solo con uno spazio. Allora cambiamo la linea ciao mondo ciao Mundo. Ora si passa di nuovo al nostro ramo principale e aggiungere un po 'di documentazione per la function. How per risolvere un conflitto file binario con Git Quando si esegue un unione in git. si potrebbe visualizzato il messaggio: In questo scenario, somefile. dll è un file binario che è stato modificato sia nel ramo corrente, e il ramo che si sta tentando di unire in al ramo corrente. Dal momento che il file non può essere testualmente fusa, è necessario prendere una decisione: si fa a mantenere la versione del file nel ramo corrente, o la versione nell'altro ramo. In TortoiseSVN, ero abituato ad essere in grado di fare clic destro sul file in questione e scelgo risolvere usando il mio, o risolvere con loro. Allora, qual è il git Resolve equivalente utilizzando miniera Il file nella copia di lavoro è ancora la copia dal ramo corrente in altre parole, non è stato modificato dal tentativo di unione. Per risolvere il conflitto e mantenere questo file: risolvere con loro Se si preferisce risolvere il conflitto usando la loro copia, è necessario ottenere la versione del file dal ramo si stava tentando di fondersi in: Ora che avete la versione corretta di il file nella copia di lavoro, è possibile contrassegnare come deliberato (con l'aggiunta di esso), e si impegnano: si noti che in luogo di otherbranch. è possibile utilizzare qualsiasi nome (treeish) che si riferisce ad un ramo: un nome filiale locale (otherbranch), un nome del ramo remoto (originmaster), una specifica commettere SHA (980e3cc), ecc Per esempio, se si dovesse fondendo dal tuo a distanza quando avete ricevuto il conflitto, e si voleva risolvere utilizzando la versione a distanza, si dovrebbe recuperare la copia del file utilizzando: quindi si aggiunge il file e si impegnano come descritto in precedenza. AGGIORNARE . C'è una scorciatoia per ottenere la copia dell'altro ramo (e utilizza anche la terminologia che mi aspettavo): Questo articolo è stato pubblicato in git. Contrassegna il permalink. Segui i commenti con il feed RSS per questo post.

No comments:

Post a Comment