Git normally does this quando si controllano i file, supponendo che le modifiche apportate non riguardino i file che verranno modificati dal checkout. Ad esempio, supponiamo di avere i seguenti file in un repository:
a.txt
b.txt
c.txt
Ora farò una modifica a un file a.txt
:
a.txt (modified)
b.txt
c.txt
Ora supponiamo di avere altri due rami, a-changed
e b-changed
, in cui sono stati modificati rispettivamente a.txt
e b.txt
.
Se provo a verificare b-changed
, Git lo farà senza reclami, perché le mie modifiche alla directory di lavoro non sono in conflitto con le modifiche apportate su quel ramo. Tuttavia, se provo a dare un'occhiata a a-changed
, Git non lo farà, perché ho apportato delle modifiche alla mia copia locale, e il checkout le avrebbe scoperte. Git dice:
$ git checkout a-changed
error: Your local changes to the following files would be overwritten by checkout:
a.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
Git non vi fornirà un modo per aggirare questo problema: stash your changes! Ciò salva le modifiche correnti come una patch e le annulla nella directory di lavoro. Cioè, dopo aver eseguito git stash
, la directory di lavoro verrà pulita e le tue modifiche saranno posizionate sullo stack . È quindi possibile eseguire il checkout del ramo desiderato ed eseguire git stash pop
, che farà scoppiare le modifiche dallo stack e applicarle al nuovo albero di lavoro. Spero che si applicheranno in modo pulito. Se non lo fanno, otterrai gli indicatori di conflitto standard di unione in a.txt
. In particolare, lo stash è non fuori dallo stack, quindi è necessario eseguire un git stash drop
dopo aver risolto l'unione.
È inoltre possibile passare il flag -m
(--merge
) al comando checkout, che indica che si desidera che le modifiche siano unite a tre vie con le modifiche in entrata. In generale, preferisco mettere da parte le cose.
Non è chiaro cosa stai chiedendo. Quando dici "le mie modifiche" ti riferisci a commit a un ramo precedente, o file modificati, o? –
@AndrewC Grazie, ho aggiornato la mia domanda. –
La risposta del 3340 copre quasi tutto in quel caso. –