Domanda

Ho un vecchio ramo, che vorrei eliminare.Tuttavia, prima di farlo, voglio controllare che tutti i cambiamenti fatti a questo ramo sono stati a un certo punto si è fusa in un altro ramo.Così, mi piacerebbe vedere tutti i cambiamenti fatti al mio attuale ramo che non sono stati applicati a qualsiasi altro ramo [o, se questo non è possibile senza un po ' di scripting, come si fa a vedere tutti i commit in un ramo che non sono stati applicati ad un altro ramo?].

È stato utile?

Soluzione

Probabilmente si vuole solo

git branch --contains branch-to-delete

Questo elencherà tutti i settori che contengono i commit da "branch-to-delete". Se si riferisce più di un semplice "branch-to-delete", la filiale è stata fusa.

Le alternative sono in realtà solo rev-list cose sintassi. per esempio. git log one-branch..another-branch mostra tutto ciò che one-branch ha bisogno di avere tutto another-branch ha.

Si può anche essere interessati a git show-branch come un modo per vedere cosa c'è dove.

Altri suggerimenti

Per visualizzare un elenco dei quali commit sono su un ramo, ma non un altro, utilizzare git log:

git log --no-merges oldbranch ^newbranch

... cioè, spettacolo commettere registri per tutti i commit su oldbranch che sono non sul newbranch. È possibile elencare più rami per includere ed escludere, per esempio.

git log  --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2

Nota: su Windows ^ è una chiave di fuga, quindi ha bisogno di essere sfuggito con un altro ^:

git log --no-merges oldbranch ^^newbranch

Per mostrare i commit in oldbranch ma non in newbranch:

git log newbranch..oldbranch

Per mostrare il diff da questi commit (notare ci sono tre punti):

git diff newbranch...oldbranch

Ecco il documento con un diagramma illustrazione https: // git -scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges

Per chi ancora alla ricerca di una risposta semplice, controlla git ciliegia . Esso mette a confronto diff effettivi, invece di commettere hash. Ciò significa che può ospitare commit che sono stati raccolti o ciliegio Ribasato.

Per prima checkout il ramo che si desidera eliminare:

git checkout [branch-to-delete]

quindi utilizzare git ciliegio per confrontarlo con il vostro ramo di sviluppo principale:

git cherry -v master

uscita Esempio:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message

. Nota: La bandiera -v è quello di includere il messaggio di commit insieme con l'hash SHA

Le linee con il '+' davanti sono nel ramo-to-delete, ma non il branch master. Quelli con un '-' davanti ha un equivalente commettere in master

.

solo per i commit che non sono in master, unire ciliegio raccogliere con grep:

git cherry -v master | grep "^\+"

uscita Esempio:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message

Mentre alcune delle risposte postato qui aiuterà a trovare ciò che cercate, i seguenti sotto-comando del git branch è una soluzione più adatta per il vostro compito.

- fusa viene utilizzato per trovare tutti i rami che possono essere eliminati in modo sicuro, dal momento che quei rami sono completamente contenuti da HEAD.

Mentre in master si può eseguire il comando per enumerare i rami si può rimuovere in modo sicuro, in questo modo:

git branch --merged
  develop
  fpg_download_links
* master
  master_merge_static

# Delete local and remote tracking branches you don't want
git branch -d fpg_download_links
git push origin :fpg_download_links
git branch -d master_merge_static
git push origin :master_merge_static

# There is also a flag to specify remote branches in the output
git branch --remotes --merged

di jimmyorr risposta non funziona su Windows. aiuta a utilizzare --not invece di ^ in questo modo:

git log oldbranch --not newbranch --no-merges

Se è una (sola) ramo che è necessario controllare, ad esempio, se si desidera che il ramo 'B' è completamente fusa in ramo 'A', si può semplicemente effettuare le seguenti operazioni:

$ git checkout A
$ git branch -d B

git branch -d <branchname> ha la sicurezza che "Il ramo deve essere completamente fusa in testa".

Attenzione : questo in realtà cancella il ramo B se viene fusa per incorporazione in A

.

È possibile utilizzare questo semplice script per vedere impegna che non sono uniti

#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
#   git branch-notmerge <branchname>
#
# Setup git alias
#   git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')

È possibile utilizzare anche lo strumento git-wtf che mostrerà lo stato di rami

Iniziare a Creare una Richiesta di Pull tramite il servizio di hosting git che si sta utilizzando.Se il ramo è stato completamente integrato nella base del ramo, sarete in grado di creare il nuovo PR.

Non c'è bisogno di fare effettivamente la richiesta di pull, utilizzare solo il primo passo in cui si sceglie di rami.

Per esempio, su GitHub:

Non c'è nulla a confronto

Can't create a PR for branches that have been merged.

Questo non fa uso di git sulla linea di comando, ma spesso mi è utile per utilizzare gli altri strumenti a vostra disposizione con un chiaro modello mentale, piuttosto che cercare di ricordare un altro arcano comando git.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top