285 votes

Comment obtenir les changements sur une branche git

Quelle est la meilleure façon d'obtenir un journal de commits sur une branche depuis le temps que c'est ramifiée à partir de la branche courante? Ma solution pour l'instant est:

git log $(git merge-base HEAD branch)..branch

La documentation de git-diff indique qu' git diff A...B est équivalent à git diff $(git-merge-base A B) B. D'autre part, la documentation de git-rev-parse indique qu' r1...r2 est défini comme r1 r2 --not $(git merge-base --all r1 r2).

Pourquoi sont-ils différents? Notez que git diff HEAD...branch donne-moi la diff je veux, mais le correspondant de la commande git log me donne plus que ce que je veux.

En images, supposons ceci:

x---y---z---direction de la
/
---a---b---c---d---e---TÊTE

Je voudrais obtenir un journal contenant engage x, y, z.

  • git diff HEAD...branch donne à ces s'engage
  • toutefois, git log HEAD...branch donne x, y, z, c, d, e.

200voto

Kevin Ballard Points 88866

Dans le contexte d'une révision de la liste, A...B est combien de git-rev-parse le définit. git log prend une révision de la liste. git-diff ne prend pas une liste de révisions - il prend un ou deux révisions, et a défini les A...B syntaxe à dire la façon dont il est défini dans l' git-diff page de manuel. Si git-diff n'ont pas de définition explicite de la...B, alors que la syntaxe serait invalide. Notez que l' git-rev-parse page de manuel décrit Un...B dans la "Spécification des Plages" de la section, et tout ce que la section n'est valable que dans les situations où une révision de la gamme est valide (c'est à dire quand une révision de la liste est souhaitée).

Pour obtenir un journal contenant x, y, et z, essayez git log HEAD..branch (deux points, et non pas trois). C'est identique à l' git log branch --not HEAD, et signifie que tous les commits de la branche qui ne sont pas sur la TÊTE.

73voto

skiphoppy Points 16563
 git cherry branch [newbranch]
 

fait exactement ce que vous demandez, quand vous êtes dans la branche master .

Je suis aussi très friand de:

 git diff --name-status branch [newbranch]
 

Ce qui n'est pas exactement ce que vous demandez, mais est toujours très utile dans le même contexte.

39voto

Nocturne Points 9973

Ce que vous voulez voir est la liste des commits sortants. Vous pouvez le faire en utilisant

 git log master..branchName 
 

ou

 git log master..branchName --oneline
 

Où je suppose que "branchName" a été créé comme une branche de suivi de "maître".

De même, pour voir les changements entrants, vous pouvez utiliser:

 git log branchName..master
 

25voto

Clintm Points 832

Ceci est similaire à la réponse que j'ai posté sur: http://stackoverflow.com/questions/2176278/preview-a-git-push/2831135#2831135

Déposez ces funcs dans votre bash profil:

  • gbout - git branch sortant
  • gbin - git branch entrants

Vous pouvez l'utiliser comme:

  • Si sur le master: gbin branch1 <-- cette va vous montrer ce qui est dans branch1 et pas de maître
  • Si sur le master: gbout branch1 <-- cela va vous montrer ce qu' en maître qui n'est pas dans la branche 1

Cela fonctionne avec n'importe quelle branche.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin { 
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not 
    git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function gbout { 
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not 
    git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

10voto

Alex V Points 8406

Jetez un -p là-dedans pour voir quelques changements de fichiers

git log -p master..branch

Faire des alias:

alias gbc="git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'"

alias gbl = 'git log -p master..'gbc`'

Voir les commits uniques d'une succursale:

gbl

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X