git-rebase
menções da página de manual -X<option>
podem ser passadas para git-merge
. Quando / como exatamente?
Eu gostaria de me refazer aplicando patches com estratégia recursiva e a opção deles (aplique o que for necessário, em vez de ignorar confirmações conflitantes inteiras). Não quero mesclar, quero tornar a história linear.
Eu tentei:
git rebase -Xtheirs
e
git rebase -s 'recursive -Xtheirs'
mas o git rejeita -X
nos dois casos.
git rebase -Xtheirs
funciona em versões recentes, exceto que os conflitos em árvore precisam ser resolvidos manualmente. Você precisa executar git rebase -Xtheirs --continue
(com -X
repetição) após resolver esses conflitos.
git
git-rebase
Kornel
fonte
fonte
git rebase --interactive
. Veja minha [resposta atualizada abaixo ( stackoverflow.com/a/2945367/6309 ).Respostas:
Você pode usar isso com o Git v1.7.3 ou versões posteriores.
(que é uma abreviação de
git rebase --strategy recursive --strategy-option theirs ${branch}
acordo com a documentação )Notas de versão do Git v1.7.3:
git rebase --strategy <s>
aprendeu a opção--strategy-option
/-X
para passar opções extras que são entendidas pela estratégia de mesclagem escolhida.NB: "Nossos" e "deles" significam o oposto do que eles fazem durante uma mesclagem direta. Em outras palavras, "deles" favorece os commits no ramo atual .
fonte
ours
etheirs
parece ser o oposto do que eu espero. Eu preciso usartheirs
para favorecer minha filial atual.-X
implica-s recursive
, então agora você pode usar apenasgit rebase ${branch} -X theirs
. (fonte git-scm.com/docs/git-rebase#git-rebase--Xltstrategy-optiongt )Isso é para estratégias de mesclagem que vêm com seu próprio conjunto de opções
deve funcionar, embora este patch mencione (fevereiro de 2010):
Portanto, se ainda não funcionar, está sendo debatido agora!(suportado no recente git)
Atualização do commit db2b3b820e2b28da268cc88adff076b396392dfe (julho de 2013, git 1.8.4+),
-X
Agora, isso significa que a estratégia trabalha com rebase interativa e rebase simples.fonte
Como o iCrazy disse, esse recurso está disponível apenas para o git 1.7.3 em diante. Então, para as pobres almas (como eu) ainda usando o 1.7.1, apresento uma solução que eu mesmo fiz:
git-rebase-deles
É um script muito bem polido (e, portanto, longo), destinado ao uso em produção: opções da interface do usuário, manipula vários arquivos, verifica se o arquivo realmente possui marcadores de conflito, etc., mas o "núcleo" pode ser resumido em 2 linhas:
E aqui está o script completo:
fonte
git rebase --strategy="recursive --theirs" master