Question

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

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

La documentation pour git-diff indique que git diff A...B est équivalent à git diff $(git-merge-base A B) B.D'autre part, la documentation de git-rev-parse indique que 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---branch
        /
---a---b---c---d---e---HEAD

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

  • git diff HEAD...branch donne à ces s'engage
  • cependant, git log HEAD...branch donne x, y, z, c, d, e.
Était-ce utile?

La solution

Dans le contexte d'une révision de la liste, A...B est comment git-rev-parse il définit.git log prend une révision de la liste. git-diff ne prenez pas une liste de révisions - il prend un ou deux révisions, et a défini les A...B la syntaxe à dire la façon dont il est défini dans le git-diff page de manuel.Si git-diff n'a pas de définition explicite de la A...B, alors que la syntaxe serait invalide.Notez que l' git-rev-parse page de manuel décrit A...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 à direlorsqu'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 les moyens de tous les commits de la branche qui ne sont pas sur la TÊTE.

Autres conseils

git cherry branch [newbranch]

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

Je suis également très friand:

git diff --name-status branch [newbranch]

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

Ce que vous voulez voir est la liste des sortants s'engage.Vous pouvez faire cela en utilisant

git log master..branchName 

ou

git log master..branchName --oneline

Où je suppose que "branchName" a été créé comme un suivi de la branche "master".

De même, pour voir les modifications entrantes, vous pouvez utiliser:

git log branchName..master

Ceci est similaire à la réponse que j'ai posté sur: Aperçu d'un Git push

Déposez ces fonctions dans votre Bash profil:

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

Vous pouvez l'utiliser comme:

  • Si sur le master:gbin branch1 <-- ce 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
}

Semblable à plusieurs réponses comme Alex V et NDavis, mais aucun d'entre eux sont tout à fait la même.

Quand déjà dans la branche en question

À l'aide de:

git diff master...

Qui combine plusieurs fonctions:

  • c'est super court
  • indique le nombre de changements

Mise à jour:

Cela devrait probablement être git diff master, mais cela montre aussi le diff, pas les commits que la question spécifiée.

Jetez un -p y voir quelques MODIFICATIONS de FICHIERS

git log -p master..branch

Faire quelques alias:

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

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

Voir une branche unique s'engage à:

gbl

Pour voir le journal de la branche courante depuis la ramification de master:

git log master...

Si vous êtes actuellement sur le master, voir le journal d'une branche différente puisqu'elle s'est ramifiée maître:

git log ...other-branch

git log --cherry-mark --oneline from_branch...to_branch

(3dots), mais parfois, il affiche " + "au lieu de"='

J'ai trouvé

git diff <branch_with_changes> <branch_to_compare_to>

plus utile, puisque vous n'avez pas seulement obtenir les messages de validation, mais l'ensemble de la diff.Si vous êtes déjà sur la branche que vous souhaitez voir les changements et (par exemple) vous voulez voir ce qui a changé pour le maître, vous pouvez utiliser:

git diff HEAD master
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top