Depois de fazer uma mesclagem "simples" (uma sem conflitos), git show
geralmente mostra apenas algo como
commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date: Tue Feb 22 00:27:17 2011 +0100
Merge branch 'testing' into master
Isso ocorre porque, para mesclagens, git show
usa o formato diff combinado que omite arquivos que concordam com qualquer uma das versões pai.
Existe uma maneira de forçar o git a mostrar ainda todas as diferenças no modo diff combinado?
Doing git show -m
mostrará as diferenças (usando diffs em pares entre as versões nova e principal, respectivamente), mas eu preferiria ter isso com as diferenças marcadas por +/- nas respectivas colunas, como no modo combinado.
Respostas:
Não, não há como fazer isso
git show
. Mas certamente seria bom às vezes, e provavelmente seria relativamente fácil de implementar no código-fonte git (afinal, você só precisa dizer a ele para não aparar o que acha que é saída estranha), então o patch deve ser feito provavelmente seria aceito pelos mantenedores do git.Tenha cuidado com o que você deseja; mesclar uma ramificação com uma alteração de uma linha que foi bifurcada há três meses ainda terá uma diferença enorme em relação à linha principal e, portanto, essa diferença completa seria quase completamente inútil. É por isso que o git não mostra isso.
fonte
Veja a mensagem de confirmação:
observe a linha:
pegue esses dois IDs de confirmação e inverta-os. então, para obter o diff que você deseja, faça:
para mostrar apenas os nomes dos arquivos alterados:
e para extraí-los, você pode adicionar isso ao seu gitconfig:
use-o fazendo:
fonte
git diff fc17405...ee2de56
- isso mostrará todas as alterações no ee2de56 acessíveis a partir de confirmações no fc17405, que acredito ser o que você deseja. Observe os 3 pontos em vez de dois.git log
, o que ainda mostra todos os commits, como a..
variante...
e...
faça o mesmo porlog
, masdiff
eles são diferentes !? Como obtenho uma lista de confirmações que foram mescladas neste ramo?Uma solução melhor (mencionada por @KrisNuttycombe):
para o commit de mesclagem:
para mostrar todas as alterações
ee2de56
acessíveis a partir de confirmaçõesfc17405
. Observe a ordem dos hashes de confirmação - é a mesma mostrada nas informações de mesclagem:Merge: fc17405 ee2de56
Observe também os 3 pontos em
...
vez de dois !Para uma lista de arquivos alterados, você pode usar:
fonte
Você pode criar uma ramificação com HEAD definido como uma confirmação antes da mesclagem. Então, você pode fazer:
Isso irá mesclar, mas não confirmar. Então:
fonte
Parece que foi respondido aqui: https://public-inbox.org/git/[email protected]/
fonte
Eu acho que você só precisa de 'git show -c $ ref'. Tentar isso no repositório git em a8e4a59 mostra um diff combinado (mais / menos caracteres em uma das 2 colunas). Como o manual do git-show menciona, ele praticamente delega para o 'git diff-tree', para que essas opções pareçam úteis.
fonte
git show -c $ref
mostra a mesma saída que citei, ou seja, sem diferenças.-c
seleciona um modo diff combinado muito semelhante ao modo padrão para confirmações de mesclagem que é '--cc', consultegit help show
egit help diff-tree
. Ambos omitem completamente os arquivos que concordam com qualquer uma das versões pai desse arquivo.a8e4a59
na verdade, não se enquadra na categoria de consolidação de mesclagem, quero dizer. Esse commit de mesclagem realmente contém um arquivo que difere de ambas as versões pai.Documentation/git-fast-import.txt
tem algumas coisas adicionadas de um pai e outras do outro. Isso resulta em saída não vazia degit diff-tree --cc
. No entanto, apenas as alterações neste caso "conflitante" são mostradas. Todos os resultados de mesclagem "limpos", vejagit show -m a8e4a59
, não são mostrados.git show -c
saída. (man git-diff-tree
Diz "Além disso, ele lista apenas os arquivos que foram modificados a partir de todos os pais." Mas eu, pelo menos certamente não tinha visto isso.)no seu caso, você só precisa
ou apenas hash para você confirmar:
fonte
git merge-base HEAD^ HEAD^2
eHEAD^
eHEAD^2
no mesmo estilo como é feito para arquivos que se fundiram com os conflitos.Se seu commit de mesclagem for 0e1329e5, como acima, você poderá obter o diff contido nessa mesclagem por:
Eu espero que isso ajude!
fonte
Se você está sentado no commit de mesclagem, isso mostra os diffs:
git diff HEAD~1..HEAD
Se você não estiver no commit de mesclagem, substitua HEAD pelo commit de mesclagem. Este método parece ser o mais simples e mais intuitivo.
fonte
Você pode usar o comando diff-tree com o sinalizador -c. Este comando mostra quais arquivos foram alterados na confirmação de mesclagem.
Eu obtive a descrição da bandeira -c no Git-Scm :
fonte
Criei uma abordagem de uso geral para executar várias operações nos commits de mesclagem.
Etapa 1 : adicione um alias ao git editando
~/.gitconfig
:Etapa 2 : Em
~/.githelpers
, defina uma função bash:Terceiro Passo : Lucro!
Provavelmente há muito espaço para melhorias aqui, apenas juntei tudo para superar uma situação irritante. Sinta-se à vontade para zombar da minha sintaxe e / ou lógica do bash.
fonte