Domanda

Qual è il modo migliore per ottenere un registro dei commit su un ramo dal momento in cui è stato ramificato dal ramo corrente?La mia soluzione finora è:

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

La documentazione per git-diff indica che git diff A...B è equivalente a git diff $(git-merge-base A B) B.D'altra parte, la documentazione per git-rev-parse indica che r1...r2 è definito come r1 r2 --not $(git merge-base --all r1 r2).

Perché sono diversi?Notare che git diff HEAD...branch mi dà le differenze che desidero, ma il corrispondente comando git log mi dà più di quello che voglio.

Nelle immagini, supponiamo questo:

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

Vorrei ottenere un registro contenente i commit x, y, z.

  • git diff HEAD...branch dà questi commit
  • Tuttavia, git log HEAD...branch dà x, y, z, c, d, e.
È stato utile?

Soluzione

Nel contesto di un elenco di revisione, A...B ecco come git-rev-parse lo definisce.git-log accetta un elenco di revisioni. git-diff non accetta un elenco di revisioni: richiede una o due revisioni e ha definito il file A...B sintassi per indicare come è definita nel file git-diff manpage.Se git-diff non ha definito esplicitamente A...B, la sintassi non sarebbe valida.Si noti che il git-rev-parse la pagina man descrive A...B nella sezione "Specifica degli intervalli" e tutto in quella sezione è valido solo nelle situazioni in cui è valido un intervallo di revisione (ad es.quando si desidera un elenco di revisioni).

Per ottenere un registro contenente solo x, yez, prova git log HEAD..branch (due punti, non tre).Questo è identico a git log branch --not HEAD, e significa tutti i commit sul ramo che non sono su HEAD.

Altri suggerimenti

git cherry branch [newbranch]

fa esattamente quello che chiedi, quando sei nel master ramo.

Sono molto affezionato anche a:

git diff --name-status branch [newbranch]

Il che non è esattamente quello che stai chiedendo, ma è comunque molto utile nello stesso contesto.

Quello che vuoi vedere è l'elenco dei commit in uscita.Puoi farlo usando

git log master..branchName 

O

git log master..branchName --oneline

Dove presumo che "branchName" sia stato creato come ramo di tracciamento di "master".

Allo stesso modo, per vedere le modifiche in arrivo puoi usare:

git log branchName..master

Questo è simile alla risposta che ho pubblicato su: Anteprima di un push Git

Trascina queste funzioni nel tuo profilo Bash:

  • gbout - ramo git in uscita
  • gbin - ramo git in entrata

Puoi usarlo come:

  • Se sul master:Gbin Branch1 <- Questo ti mostrerà cosa c'è in Branch1 e non in Master
  • Se sul master:Gbout Branch1 <- Questo ti mostrerà ciò che è nel maestro che non è nella filiale 1

Funzionerà con qualsiasi ramo.

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
}

Simile a diverse risposte come quella di Alex V e NDavis, ma nessuna è esattamente la stessa cosa.

Quando già nella filiale in questione

Utilizzando:

git diff master...

Che unisce diverse funzionalità:

  • è super corto
  • mostra le modifiche effettive

Aggiornamento:

Questo probabilmente dovrebbe essere git diff master, ma anche questo mostra la differenza, non i commit come specificato nella domanda.

Inserisci un -p lì dentro per vedere alcune MODIFICHE AI FILE

git log -p master..branch

Crea alcuni alias:

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

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

Visualizza i commit univoci di un ramo:

gbl

Per vedere il registro del ramo corrente dalla diramazione del master:

git log master...

Se sei attualmente su master, per vedere il registro di un ramo diverso da quando si è diramato dal master:

git log ...other-branch

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

(3 punti) ma a volte mostra '+' invece di '='

ho trovato

git diff <branch_with_changes> <branch_to_compare_to>

più utile, dal momento che non ottieni solo i messaggi di commit ma l'intero diff.Se sei già sul ramo di cui vuoi vedere le modifiche e (ad esempio) vuoi vedere cosa è cambiato nel master, puoi usare:

git diff HEAD master
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top