Per unire selettivamente i file da un ramo a un altro ramo, esegui
git merge --no-ff --no-commit branchX
dove si branchX
trova il ramo che si desidera unire nel ramo corrente.
L' --no-commit
opzione metterà in scena i file che sono stati uniti da Git senza effettivamente eseguirne il commit. Questo ti darà l'opportunità di modificare i file uniti come desideri e poi di impegnarli da soli.
A seconda di come si desidera unire i file, ci sono quattro casi:
1) Vuoi una vera unione.
In questo caso, accetti i file uniti nel modo in cui Git li ha uniti automaticamente e poi li commetti.
2) Ci sono alcuni file che non vuoi unire.
Ad esempio, si desidera conservare la versione nel ramo corrente e ignorare la versione nel ramo da cui si sta unendo.
Per selezionare la versione nel ramo corrente, eseguire:
git checkout HEAD file1
Questo recupererà la versione di file1
nel ramo corrente e sovrascriverà il file1
comando automatico di Git.
3) Se vuoi la versione in branchX (e non una vera unione).
Correre:
git checkout branchX file1
Questo recupererà la versione di file1
in branchX
e sovrascriverà file1
automaticamente unita da Git.
4) L'ultimo caso è se si desidera selezionare solo fusioni specifiche file1
.
In questo caso, puoi modificare file1
direttamente la modifica , aggiornarla a qualunque cosa tu voglia file1
diventare la versione e quindi eseguire il commit.
Se Git non è possibile unire automaticamente un file, segnalerà il file come " unmerged " e produrre una copia in cui è necessario risolvere i conflitti manualmente.
Per spiegare ulteriormente con un esempio, supponiamo che tu voglia unirti branchX
al ramo corrente:
git merge --no-ff --no-commit branchX
Quindi si esegue il git status
comando per visualizzare lo stato dei file modificati.
Per esempio:
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
Where file1
, file2
e file3
sono i file che git si sono uniti automaticamente con successo.
Ciò significa che i cambiamenti in master
e branchX
per tutti e tre questi file sono stati combinati insieme senza alcun conflitto.
È possibile controllare come è stata eseguita l'unione eseguendo il git diff --cached
;
git diff --cached file1
git diff --cached file2
git diff --cached file3
Se ritieni che alcune fusioni siano indesiderabili, puoi farlo
- modifica direttamente il file
- Salva
git commit
Se non si desidera unire file1
e si desidera conservare la versione nel ramo corrente
Correre
git checkout HEAD file1
Se non si desidera unire file2
e si desidera solo la versionebranchX
Correre
git checkout branchX file2
Se vuoi file3
unirti automaticamente, non fare nulla.
Git lo ha già unito a questo punto.
file4
sopra è una fusione fallita di Git. Ciò significa che ci sono cambiamenti in entrambi i rami che si verificano sulla stessa linea. Qui è dove dovrai risolvere i conflitti manualmente. Puoi scartare l'unione fatta modificando direttamente il file o eseguendo il comando di checkout per la versione nel ramo che vuoi file4
diventare.
Infine, non dimenticare di git commit
.