diff cópia de trabalho atual de um arquivo com cópia confirmada de outra ramificação

158

Eu tenho um repositório com arquivo foono ramo principal. Eu mudei para o ramo de barra e fiz algumas alterações no foo. Como posso agora executar uma git diffcópia entre esta cópia (que ainda não foi confirmada) e a cópia da ramificação principal?

Dogbert
fonte

Respostas:

151

O seguinte funciona para mim:

git diff master:foo foo

No passado, pode ter sido:

git diff foo master:foo

Mark Longair
fonte
9
Cada vez que vejo uma resposta sua em relação a git diff, eu sempre penso em stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/…
VonC 02/02/2012
@VonC: obrigado, é bom saber que valeu a pena desenhá-las :) Aliás, você entende a estranheza com a qual atualizei minha resposta?
Mark2:
2
Você tentou com a --para separar parâmetros dos argumentos do caminho? git diff -- master:foo foo
VonC 02/02/12
1
No 1.8, git diff -- master:foo foonão funciona - parece tratar o arg master:foocomo um nome de arquivo inexistente (e o ignora) em vez de um arquivo em uma ramificação. Tente alternar os últimos 2 argumentos - se funcionou, a comparação de diferenças deve ser revertida, mas a saída não muda.
Kelvin
9
Para mim, é o contrário - eu posso fazer, git diff master:foo foomas não vice-versa. Eu também não entendo. Com o git 1.7.9.5 / Ubuntu 12.04, pelo menos, posso fazer git diff -R master:foo foopara obter o diff que realmente quero. Quando tento isso com o msysgit 1.9.4 / Windows 7 x64, recebo fatal: unable to read 0000000000000000000000000000000000000000. Sem -R, recebo a mesma mensagem de erro que você com git 1.7.9.5, mas com 1.9.4 recebo fatal: master:foo: no such path in the working tree.
JMM
100

Você está tentando comparar sua árvore de trabalho com um nome de ramificação específico, então deseja o seguinte:

git diff master -- foo

Que é desta forma de git-diff (consulte a página de manual do git-diff)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

Para sua informação, também existe uma opção --cached(aka --staged) para visualizar o diff do que você organizou, em vez de tudo na sua árvore de trabalho:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.
Jordan Brough
fonte
2
Obrigado. Não faço ideia do porquê, mas apenas essa resposta funcionou para mim com o git 1.8.1 no Linux.
srking
Excelente, obrigado. Fiquei com vontade de incluir o nome da minha ramificação atual no comando diff, mas vejo que isso não é necessário.
yoyo 24/02
Isso funcionou para mim há alguns meses atrás, mas não parece ser agora. Atualmente, estou na versão 2.7.4 do git (Apple Git-66); Eu não sei o que eu tinha antes.
hBrent
@hBrent isso ainda funciona para mim no OSX 10.11 com git 2.7.3. Aqui está um repo amostra rápida com instruções se isso é útil: github.com/jordan-brough/git-diff-test
Jordan Brough
Obrigado @JordanBrough.
hBrent
14

Além disso: git diff master..feature foo

Uma vez git diff foo master:fooque não funciona em diretórios para mim.

ArtBIT
fonte
Nem eu. É uma coisa do Windows?
23313 Scott Stafford
@ScottStafford Estou no Ubuntu, então não, não parece que é apenas uma coisa do Windows.
ArtBIT
Funciona para mim, desde que eu dou explicitamente ambos os nomes do ramo (janelas) git diff branch1:foo master:foo
Meep
12
git difftool tag/branch filename
Adir
fonte
Essa é a única resposta que funcionou para mim na comparação entre uma cópia de trabalho local de um arquivo e a versão do arquivo em um repositório remoto (não "origem"). Obrigado, Adir e Baz
Mouse
git difftoolnão tem -vopção de acordo com docs git-scm.com/docs/git-difftool . Você quis dizer -y?
precisa saber é o seguinte
10
git diff mybranch master -- file

também deve funcionar

Naoise Golden
fonte
4
Isso funciona apenas para arquivos confirmados no mybranch, e não na cópia de trabalho atual do arquivo.
yoyo 24/02
o que significa "-" acima
Pushparaj
Isso permite comparar nas duas direções: git diff deployment master -- filee git diff master deployment -- filefunciona conforme o esperado com quaisquer 2 ramificações .
viktorkho 30/06
0

Para ver as alterações locais comparar com sua filial atual

git diff .

Para ver o local alterado, compare com qualquer outro ramo existente

git diff <branch-name> .

Para ver as alterações de um arquivo específico

git diff <branch-name> -- <file-path>

Certifique-se de executar git fetchno início.

kta
fonte