2014-09-29 12 views
14

Ho 2 rami - master e developconflitti Git a tirare le richieste

ho fatto alcune richieste di pull nella mia develop ramo in cui essa contiene 5 articoli, in cui è lo stesso del numero di elementi in master .

Tuttavia, qualcuno ha eseguito alcuni commit e pushed in alcuni altri articoli nel ramo master e quindi ora ha 8 elementi.

Come la mia richiesta di pull nella develop è ancora non ancora approvato/fusione, ogni volta che ho provato ad aggiornare la mia richiesta di pull, sto ottenendo il messaggio che indica che This pull request can't be merged. You will need to resolve conflicts to be able to merge e mi ha chiesto di effettuare le seguenti operazioni:

git fetch origin master 
git checkout develop 
git merge FETCH_HEAD 
git commit 
git push origin HEAD 

E questo accade dopo che ho "spinto" fuori i miei commit, rendendomi a volte confuso. Poi ho capito che mi sta chiedendo di riaggiungere e re-commit negli ulteriori 3 nuovi elementi. Questo vuol dire che devo assicurarmi che gli oggetti e i contenuti tra questi 2 rami siano gli stessi di sempre? Ho sempre usato git pull/fetch ma ci sarà un modo migliore per assicurarmi?

+0

No, ti sta chiedendo di unire. Sembra che tu sia confuso su come funzionano i rami - vedi il capitolo [relativo ai documenti] (http://git-scm.com/book/en/Git-Branching) – remram

+0

@remram Probabilmente sono davvero confuso. Ma anche così, perché dovrebbe chiedermi di unire il master allo sviluppo? Di solito è il contrario per me – dissidia

+0

Se unisci master in sviluppo, github sarà in grado di unire automaticamente lo sviluppo in master. – remram

risposta

17

Ciò significa che GitHub vorrebbe unire il ramo PR in master, ma non può, perché ci sono conflitti. Come hai discusso nei commenti delle domande, il modo migliore per gestire questo (in genere) è quello di unire il tuo ramo master a develop sulla riga di comando. Questo ti mostrerà i conflitti e ti chiederà di risolverli. Una volta completata e completata l'unione, il PR sarà unificabile in master utilizzando il pulsante verde su GitHub.

È potrebbe semplicemente unire la filiale deploy in master (che mi rendo conto che suona un po 'più sensibile). In tal caso, ignoreresti completamente il PR. Dovresti chiudere il PR "non interposto" e, separatamente, avresti premuto manualmente il commit unione su master.

Facendo la prima strada,

  1. si effettua una migliore traccia di controllo attraverso la fusione di padroneggiare su GitHub, utilizzando il PR;
  2. offri al tuo team la possibilità di rivedere il codice dopo l'unione, prima che atterri su master; e
  3. se si dispone di test automatici (come Travis CI o CircleCI) che controllano i PR, si dà loro la possibilità di eseguire anche il codice unito.
+0

Quindi ha un senso per me allora, specialmente nel caso del ramo PR, in cui sarebbe completamente diverso da quello che ho fatto dove il mio ramo 'sviluppo' è stato fuso in' master' proprio come quello che tu ho menzionato. – dissidia

+0

Esatto. Se hai un singolo ramo 'develop' che si unisce periodicamente a' master', probabilmente dovresti fare meglio a non effettuare richieste pull da quel ramo. Se lo desideri, puoi fare richieste di pull da specifici rami di argomento a 'deploy', e quindi unire' deploy' a 'master' sulla riga di comando quando sei pronto a spostare una serie di modifiche. – Peeja

+0

Questo link offre una buona panoramica su come ottenere lo statement Peeja di merging master in sviluppo: https://confluence.atlassian.com/bitbucket/resolve-merge-conflicts-704414003.html – Paul

0

L'ho risolto utilizzando l'interfaccia eclipse-git come descritto di seguito.

1- Mantieni tutte le modifiche pronte nel ramo 'dev' e spingile a dare.

2- checkout al ramo "master" e tutte le modifiche.

3- Vai a "Git repositories view -> espandi la cartella locale" e fai clic con il pulsante destro del mouse sul ramo "master" e fai clic sull'opzione "unisci".

4- Si aprirà mostra tutti quei conflitti con punti rossi nella finestra 'Git staging'.

5- Ora fare clic con il pulsante destro del mouse su ciascun punto rosso e fare clic su -> 'sostituisci con git index'. quella macchia rossa scomparirà ora.

6- dopo aver eseguito questa operazione per tutti i punti rossi, eseguire l'unione con il pulsante di destra.

7-done.