Le risposte fornite finora non sono ideali perché richiedono molto lavoro inutile per risolvere i conflitti di unione o fanno troppe ipotesi che sono spesso false. Ecco come farlo perfettamente. Il link è al mio sito.
Hai apportato modifiche non impegnate su my_branch
cui vuoi impegnarti master
, senza eseguire tutte le modifichemy_branch
.
Esempio
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
Spiegazione
Inizia unendoti master
al tuo ramo, poiché alla fine dovrai farlo comunque, e ora è il momento migliore per risolvere eventuali conflitti.
L' -u
opzione (aka --include-untracked
) git stash -u
ti impedisce di perdere file non tracciati quando successivamente lo fai git clean -f -d
all'interno master
.
Dopo git checkout master
è importante che NON lo faccia git stash pop
, perché in seguito avrai bisogno di questa scorta. Se si pop la scorta creata in my_branch
e poi fare git stash
in master
, che riuscirai a causare inutili conflitti di unione quando più tardi si applicare tale scorta a my_branch
.
git reset
rimuove in scena tutto ciò che risulta da git stash apply
. Ad esempio, i file che sono stati modificati nello stash ma in cui non esistonomaster
vengono messi in scena come conflitti "eliminati da noi".
git checkout .
e git clean -f -d
scarta tutto ciò che non è stato eseguito il commit: tutte le modifiche ai file tracciati e tutti i file e le directory non tracciati. Sono già salvati nella scorta e se lasciati master
potrebbero causare inutili conflitti di unione quando si torna a my_branch
.
L'ultimo git stash pop
si baserà sull'originale my_branch
e quindi non causerà conflitti di unione. Tuttavia, se la tua scorta contiene file non tracciati che hai impegnato a master, git si lamenterà che "Impossibile ripristinare i file non tracciati dalla scorta". Per risolvere questo conflitto, eliminare i file dal vostro albero di lavoro, quindi git stash pop
, git add .
e git reset
.