Quando executo o "git pull", geralmente quero saber o que mudou entre a última versão de um arquivo e a nova. Digamos que eu queira saber o que outra pessoa comprometeu em um determinado arquivo.
Como isso é feito?
Estou assumindo que é "git diff" com alguns parâmetros para commit x versus commit y, mas não consigo obter a sintaxe. Também acho "git log" um pouco confuso e não tenho certeza de onde obter o ID de confirmação da minha versão mais recente do arquivo em comparação com a nova.
Respostas:
Existem todos os tipos de maneiras maravilhosas de especificar commits - veja a seção de especificações de revisões
man git-rev-parse
para mais detalhes. Nesse caso, você provavelmente deseja:Os
@{1}
meios "a posição anterior do ref eu especificado", de modo que avalia o que você tinha verificado anteriormente - pouco antes da tração. Você pode adicionarHEAD
o final aqui se também tiver algumas mudanças em sua árvore de trabalho e não quiser ver as diferenças para elas.Não tenho certeza do que você está pedindo com "o ID de confirmação da minha versão mais recente do arquivo" - o "ID" de confirmação (hash SHA1) é aquele hexadecimal de 40 caracteres bem no topo de cada entrada na saída do git log. É o hash para todo o commit, não para um determinado arquivo. Você realmente não precisa de mais - se quiser comparar apenas um arquivo no pull, faça
Isso é uma coisa geral - se você quiser saber sobre o estado de um arquivo em um determinado commit, você especifica o commit e o arquivo, não um ID / hash específico para o arquivo.
fonte
@{1}
como abreviação paraHEAD@{1}
)Eu gosto de usar:
Ou se eu só quiser comparar um arquivo específico:
fonte
HEAD^
é o commit pai, não o commit anteriorpull
HEAD
for um commit de mesclagem,HEAD^
é o primeiro commit pai, então sim, pode ser o commit antes depull
. Para obter o outro pai (para uma fusão bidirecional), useHEAD^2
. Mas então, a resposta acima não está realmente respondendo à pergunta em primeiro lugar, deixando o -1 ;-)Se você fizer um direto,
git pull
então você será 'acelerado' ou mesclará um número desconhecido de commits do repositório remoto. Porém, isso acontece como uma ação, então o último commit em que você estava imediatamente antes do pull será a última entrada no reflog e pode ser acessado comoHEAD@{1}
. Isso significa que você pode fazer:No entanto, eu recomendo fortemente que se isso for algo que você está fazendo muito, você deve considerar apenas fazer
git fetch
ae examinar o branch obtido antes de mesclar ou rebasear manualmente nele. Por exemplo, se você estiver no master e for puxar na origem / master:fonte
git log
vez degit diff
aqui (mesmo se a sintaxe for um pouco incoerente entre '..' paragit log
e '...' paragit diff
;) +1 Consulte stackoverflow.com/questions/53569/… e stackoverflow.com/questions / 850607 /…