Domanda

Ho un server Git remoto, qui è lo scenario che voglio eseguire:

  • Per ogni bug / Caratteristica creo un ramo Git diverso

  • continuo a commettere il mio codice in quel ramo Git con UN-ufficiali messaggi Git

  • In cima repository dobbiamo fare un commit per un bug con il messaggio Git ufficiale

Così come posso unire il mio ramo in ramo remoto in modo che essi ottenere solo un commit per tutti i miei check-in (ho anche voglia di fornire messaggio di commit per questo)?

È stato utile?

Soluzione

Di 'la tua filiale bug fix si chiama bugfix e si desidera unire in master:

git checkout master
git merge --squash bugfix
git commit

Questo vi porterà tutti i commit dal ramo bugfix, schiacciarli in 1 commit, e si fondono con il vostro ramo master.


Spiegazione :

git checkout master

Passa alla tua filiale master.

git merge --squash bugfix

prende tutti i commit dal ramo bugfix e si fonde con il vostro ramo corrente.

git commit

Crea un singolo commit dai cambiamenti fuse.

L'omissione del parametro -m consente di modificare una bozza di messaggio di commit contenente ogni messaggio dai vostri commit schiacciate prima di completare la commit.

Altri suggerimenti

Ciò che alla fine chiarito questo per me è stato un commento dimostrando che:

git checkout main
git merge --squash feature

è l'equivalente di fare:

git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .

Quando voglio unire un ramo di caratteristica con 105 commit (!!) e li hanno tutti schiacciati in uno, io non voglio git rebase -i origin/master perché ho bisogno di separatamente a risolvere i conflitti di unione per ogni dei commit intermedi (o almeno quelle che git non può capire se stesso). Utilizzando git merge --squash mi ottiene il risultato che voglio, di un singolo commit per unire un intero ramo di caratteristica. E, ho solo bisogno di fare al massimo una risoluzione dei conflitti manuale.

Si vuole fondersi con l'opzione squash. Che, se si vuole fare un ramo alla volta.

git merge --squash feature1

Se si desidera unire tutti i rami, allo stesso tempo come singoli commit, poi la prima rebase interattivo e schiacciare ogni funzionalità poi polpo fusione:

git checkout feature1
git rebase -i master

Squash in uno commettere quindi ripetere per le altre caratteristiche.

git checkout master
git merge feature1 feature2 feature3 ...

L'ultima unione è una "piovra merge" perché è la fusione un sacco di rami in una volta.

Spero che questo aiuti

Se avete già git merge bugfix su main, è possibile schiacciare la stampa impegnarsi in uno con:

git reset --soft HEAD^1
git commit

unione tra rami newFeature in master con un costume commettere:

git merge --squash newFeature && git commit -m 'Your custom commit message';

Se, invece, si fa

git merge --squash newFeature && git commit

si otterrà un messaggio di commit che includerà tutti i commit ramo newFeature, che è possibile personalizzare.

spiego accuratamente qui: https://youtu.be/FQNAIacelT4

So che questa domanda non si tratta di Github particolare, ma dal momento che Github è così ampiamente usato e questa è la risposta che cercavo, io condividere qui.

Github ha la capacità di eseguire le unioni da squash, a seconda della fusione opzioni abilitate per il repository.

Se unioni da squash sono abilitati, l'opzione "Squash e si fondono" dovrebbe apparire nel menu a discesa sotto il pulsante "Unisci".

Screenshot di "Squash e si fondono" caratteristica Github

Supponiamo che avete lavorato in funzione / task1 con più commit.

  1. Vai al ramo del progetto (progetto / my_project)

    git checkout project/my_project
    
  2. Crea un nuovo ramo (funzione / task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. Marge con l'opzione --squash

    git merge --squash feature/task1
    
  4. creare un unico commit

    git commit -am "add single comments"
    
  5. Spingere il ramo

    git push --set-upstream origin feature/task1_bugfix
    

Per Git

Crea una nuova funzionalità

tramite Terminal / Shell:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

Ciò non lo commette, ti permette di rivedere prima.

Poi commettere, e funzionalità di finitura da questo nuovo ramo, ed eliminare / ignorare il vecchio (quello che hai fatto dev su).

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