2015-04-12 11 views
8

Sto provando a scrivere script su alcune operazioni git che implicano alcuni rebasing/cherry-picking/ecc.risolve il conflitto git con i comandi idraulici

C'è un modo per risolvere un conflitto senza dover eseguire comandi come:

git rebase --continue 
git cherry-pick --continue 
git merge --continue 

sto cercando di evitare l'editor mai essere eseguito quando git vuole un messaggio di commit.

Forse c'è un modo per dire a git che le cose sono state risolte e passare un messaggio di commit predefinito se necessario?

+0

Ci sono molti modi per fornire un messaggio di commit non interattivo ('-m',' -C', '-F', solo per nominarne alcuni da' git commit'). Nessuno di questi è specifico per la risoluzione dei conflitti. – chepner

+0

C'è un modo per dire a git che tutti i conflitti sono risolti senza dover usare * - continua? –

+0

Non sono sicuro di aver capito. Per definizione, un conflitto è qualcosa che richiede un intervento manuale, e 'git' non ha modo di sapere che l'intervento manuale è finito senza che tu stia eseguendo * qualcosa * come' git qualunque - continua '. – chepner

risposta

5

È possibile utilizzare git commit -m '$msg' per commettere le modifiche, quindi emettere un comando che dice "andare avanti con le prossime tappe":

Per git rebase:

git commit -m '$msg' 
git rebase --skip 

r git cherry_pick:

git commit -m '$msg' 
# if you are cherry-picking several commits at once, 
# this will skip the current (conflicting) one, and proceed with the remaining ones : 
git reset 
git cherry-pick --continue 

Per git merge:
Non v'è alcuna direttiva git merge --continue. In caso di conflitto, basta risolvere il conflitto, quindi commit. Quindi lo farà git commit -m '$msg'.

+0

Sì, git rebase --skip _after_ creazione di un commit per correggere i conflitti sembra funzionare! Oltre a fare il commit dopo un cherry-pick. Quindi, risulta che non avevo davvero bisogno di un comando idraulico ... Avevo solo bisogno di creare manualmente il commit piuttosto che git finire il lavoro. –

3

Prova a utilizzare l'opzione -x. Quello è opzioni fa:

-x Quando si registra il commit, aggiungere una riga che dice "(ciliegia raccolto da commettere ...)" per il messaggio originale impegnarsi al fine di indicare che commettono questo cambiamento è stato raccolto dalla ciliegia. Questo è fatto solo per cherry picks senza conflitti. Non utilizzare questa opzione se si sta selezionando dal proprio ramo privato perché l'informazione è inutile per il destinatario. Se, d'altra parte, si seleziona la ciliegia tra due rami visibili pubblicamente (ad esempio il backporting di una correzione a un ramo di manutenzione per una versione precedente da un ramo di sviluppo), l'aggiunta di queste informazioni può essere utile.

git-scm.herokuapp.com/docs/git-cherry-pick

anche --allow-empty può essere utile

+0

Grazie per questo, ma sto cercando una soluzione più generale a quando i conflitti si verificano Questo vale per rebase, cherry-pick, merge, stashpop, e sono sicuro che altri –

+0

Potresti fornire alcuni dettagli su quale comportamento intendevi implementare? Per esempio: se su cherry-pick ci sono alcuni conflitti di fusione come pensi di risolverlo: basta dire niente per consolare e andare avanti (in che modo non può esistere proponibile) o forse vuoi tornare indietro tutte le tue modifiche (http://stackoverflow.com/questions/2073841/how-can-i-discard-remote-changes-and-mark-a-file-as-resolved) e così via. –

+0

Quando si verifica il conflitto, l'utente risolve i conflitti e quindi preme semplicemente "il pulsante Fine". Nessun input aggiuntivo (ad esempio, inserendo un messaggio di commit). –

Problemi correlati