Acho que não há uma maneira de simular o que acontecerá até você tentar a mesclagem. No entanto, se você certificar-se de que a saída de git statusesteja vazia antes de fazer a mesclagem, é bastante seguro seguir em frente e testá-la. Se você tiver conflitos, poderá voltar imediatamente ao estado em que estava antes com:
git reset --merge
Desde o git 1.7.4, você também pode cancelar a mesclagem fazendo:
A resposta de @ Amber está respondendo exatamente ao que está sendo perguntado 'como simular a mesclagem'. usando --no-commité muito mais fácil na minha opinião
samirahmed
14
@samirahmed: @Amber respondeu à pergunta mais literalmente, com certeza, embora --no-commitvocê ainda esteja alterando o índice e a árvore de trabalho, o que não é exatamente "sem fazer alterações" :) Meu argumento é que quando as pessoas perguntam esse tipo de pergunta, geralmente é porque eles não sabem que a melhor maneira de ver como seria uma mesclagem é apenas tentar a mesclagem , geralmente porque eles não sabem como é fácil voltar ao estado em que estavam antes se acabou por haver problemas.
precisa saber é o seguinte
2
Eu não sei se isso foi adicionado em uma versão mais recente do git, mas nos documentos (1.8.4) ele afirma " git merge --aborté equivalente a git reset --mergequando MERGE_HEADestá presente", então, o que for mais fácil de lembrar :)
Samuel Meacham
@ SamuelMeacham: obrigado por apontar isso - foi introduzido no 1.7.4. Eu atualizei a resposta com isso. Obrigado!
Mark Longair
Esta sugestão não fez nada para mim, no git 1.9.4.
djangofan
137
Você pode usar git merge --no-commitpara impedir que a mesclagem seja realmente confirmada e, se você não gostar de como a mesclagem funciona, basta redefinir a cabeça original.
Se você definitivamente não quiser finalizar a mesclagem, mesmo que seja um avanço rápido (e, portanto, sem conflitos, por definição), você pode adicionar --no-fftambém.
Você também pode fazer git checkout --detache testar o que quiser. Mais tarde, se você quiser manter suas alterações, faça git checkout -b new_branch. E se você quiser jogar fora suas alterações, faça o checkout de qualquer ramo que desejar ( git checkout master).
Shayan Toqraee
Se topic_branchfor grande (como provavelmente é o caso se você estiver nessa questão em primeiro lugar), o diff masterresultado provavelmente será muito grande para você observar se uma mesclagem causará conflitos.
Crescent Fresh
Definitivamente gosto muito disso ... seguro e simples.
Recuse-se a mesclar e sair com um status diferente de zero, a menos que o HEAD atual já esteja atualizado ou a mesclagem possa ser resolvida como um avanço rápido.
Não é realmente uma simulação, porque haverá uma mesclagem de avanço rápido no caso de não haver conflitos entre os dois ramos. Mas em caso de conflitos, você será informado e nada acontecerá.
Eu tenho sido capaz de usar git merge --abort, recentemente. No entanto, isso só pode ser usado se houver um conflito de mesclagem. Se você tiver certeza de que não deseja confirmar, use os outros métodos mencionados acima.
Quais outros métodos mencionados acima? Todos eles mencionam git merge --abort. Você deve revisar sua resposta no futuro, especificando quem escreveu a resposta a que você está se referindo.
Michael Fulton
3
Por que não criar um ramo descartável (git checkout -b) e fazer um teste mesclado?
O que você sugere é realmente a resposta por Ian expressa sucintamente :)
tzot
0
Não sei exatamente se é o seu caso , mas sua pergunta lembra-se de que às vezes inicio um recurso, comprometo-me ao longo dos dias e mesclo o desenvolvimento nele muitas vezes.
Nesse ponto, perco o controle sobre os arquivos exatos que alterei e só o saberei quando meu recurso foi fechado e meu código foi desenvolvido.
Nesse caso, uma boa maneira de saber quais modificações você fez (e não outras das mesclagens) está usando o Sourcetree.
Você deve clicar com o botão direito no ramo base e selecionar Diff Against Current:
O sourcetree mostrará todas as modificações que serão mescladas se você mesclar sua ramificação na ramificação base.
Obviamente, ele não mostrará os conflitos, mas é uma ferramenta útil nas mesclagens.
Respostas:
Acho que não há uma maneira de simular o que acontecerá até você tentar a mesclagem. No entanto, se você certificar-se de que a saída de
git status
esteja vazia antes de fazer a mesclagem, é bastante seguro seguir em frente e testá-la. Se você tiver conflitos, poderá voltar imediatamente ao estado em que estava antes com:Desde o git 1.7.4, você também pode cancelar a mesclagem fazendo:
(Como a mensagem de confirmação que adicionou essa opção explica , ela foi adicionada para consistência
git rebase --abort
e assim por diante.)fonte
--no-commit
é muito mais fácil na minha opinião--no-commit
você ainda esteja alterando o índice e a árvore de trabalho, o que não é exatamente "sem fazer alterações" :) Meu argumento é que quando as pessoas perguntam esse tipo de pergunta, geralmente é porque eles não sabem que a melhor maneira de ver como seria uma mesclagem é apenas tentar a mesclagem , geralmente porque eles não sabem como é fácil voltar ao estado em que estavam antes se acabou por haver problemas.git merge --abort
é equivalente agit reset --merge
quandoMERGE_HEAD
está presente", então, o que for mais fácil de lembrar :)Você pode usar
git merge --no-commit
para impedir que a mesclagem seja realmente confirmada e, se você não gostar de como a mesclagem funciona, basta redefinir a cabeça original.Se você definitivamente não quiser finalizar a mesclagem, mesmo que seja um avanço rápido (e, portanto, sem conflitos, por definição), você pode adicionar
--no-ff
também.fonte
git merge --abort
exista - talvez você queira dizergit reset --merge
?rebase
não há um--abort
paragit merge
.--no-ff
também. Para impedir que uma mesclagem ff ocorra.--no-ff
é praticamente obrigatório aqui, pois--no-commit
não impede as alterações de avanço rápido.Se eu quiser comparar as alterações em uma ramificação de tópico para dominar, acho mais fácil e seguro fazer o seguinte:
Depois de concluir a mesclagem, é fácil ver a alteração consolidada do mestre
Quando terminar, basta excluir o ramo trial_merge
Dessa forma, o ramo mestre nunca muda.
fonte
git checkout --detach
e testar o que quiser. Mais tarde, se você quiser manter suas alterações, façagit checkout -b new_branch
. E se você quiser jogar fora suas alterações, faça o checkout de qualquer ramo que desejar (git checkout master
).topic_branch
for grande (como provavelmente é o caso se você estiver nessa questão em primeiro lugar), odiff master
resultado provavelmente será muito grande para você observar se uma mesclagem causará conflitos.Eu uso :
de acordo com a documentação :
Não é realmente uma simulação, porque haverá uma mesclagem de avanço rápido no caso de não haver conflitos entre os dois ramos. Mas em caso de conflitos, você será informado e nada acontecerá.
fonte
Eu tenho sido capaz de usar
git merge --abort
, recentemente. No entanto, isso só pode ser usado se houver um conflito de mesclagem. Se você tiver certeza de que não deseja confirmar, use os outros métodos mencionados acima.fonte
git merge --abort
. Você deve revisar sua resposta no futuro, especificando quem escreveu a resposta a que você está se referindo.Por que não criar um ramo descartável (git checkout -b) e fazer um teste mesclado?
fonte
Não sei exatamente se é o seu caso , mas sua pergunta lembra-se de que às vezes inicio um recurso, comprometo-me ao longo dos dias e mesclo o desenvolvimento nele muitas vezes.
Nesse ponto, perco o controle sobre os arquivos exatos que alterei e só o saberei quando meu recurso foi fechado e meu código foi desenvolvido.
Nesse caso, uma boa maneira de saber quais modificações você fez (e não outras das mesclagens) está usando o Sourcetree.
Você deve clicar com o botão direito no ramo base e selecionar
Diff Against Current
:O sourcetree mostrará todas as modificações que serão mescladas se você mesclar sua ramificação na ramificação base.
Obviamente, ele não mostrará os conflitos, mas é uma ferramenta útil nas mesclagens.
fonte