Per unire selettivamente i file da un ramo a un altro ramo, esegui
git merge --no-ff --no-commit branchX
dove si branchXtrova il ramo che si desidera unire nel ramo corrente.
L' --no-commitopzione 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 file1nel ramo corrente e sovrascriverà il file1comando 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 file1in branchXe sovrascriverà file1automaticamente unita da Git.
4) L'ultimo caso è se si desidera selezionare solo fusioni specifiche file1.
In questo caso, puoi modificare file1direttamente la modifica , aggiornarla a qualunque cosa tu voglia file1diventare 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 branchXal ramo corrente:
git merge --no-ff --no-commit branchX
Quindi si esegue il git statuscomando 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, file2e file3sono i file che git si sono uniti automaticamente con successo.
Ciò significa che i cambiamenti in mastere branchXper 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 file1e si desidera conservare la versione nel ramo corrente
Correre
git checkout HEAD file1
Se non si desidera unire file2e si desidera solo la versionebranchX
Correre
git checkout branchX file2
Se vuoi file3unirti automaticamente, non fare nulla.
Git lo ha già unito a questo punto.
file4sopra è 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 file4diventare.
Infine, non dimenticare di git commit.