Quindi, ho affrontato questo problema abbastanza spesso, e ho provato a cercare qualsiasi soluzione online, ma non sono sicuro se questo è il comportamento previsto di Git o no .'git pull' fa commettere gli altri nella mia area di staging durante il conflitto di fusione
Ogni volta che ho alcuni commit locali e faccio un git pull
, git porta tutti i commit delle altre persone nella mia area di staging in caso, ho un conflitto di fusione. Ora, anche se il conflitto è su un singolo file, non capisco perché git porta i commit non conflittuali di altre persone nella mia area di staging, chiedendomi di impegnarli come se fossero cambiamenti/commit fatti da me.
Recentemente, ho avuto lo stesso comportamento sul portatile di un collega, e non abbiamo disattivato tutti i file non aggiunti dal collega prima di eseguire il commit, quindi ho eseguito il commit dell'unico file che era in conflitto. E quello che è successo, è stato abbastanza inaspettato. Apparentemente Git ha cancellato tutti quei file, ha annullato tutte le modifiche, come se il nostro commit le avesse invertite.
Tuttavia, la cosa più strana di tutte è stata, abbiamo guardato in Stash (usiamo Stash per gestire il repository centrale), e non ho visto questi file annullati dal nostro commit in Stash.
Sono in perdita perché è successo. Qualche spiegazione plausibile? Inoltre, ho visto Stash recitare in modo strano a volte. Sembra inaffidabile. Non mostrerà alcun cambiamento tra due commit, eppure ci sono a volte, cambiamenti. Non ho idea di come ciò accada, ma qualcun altro ha riscontrato questi problemi?
Aggiornamento: in seguito ho capito che Stash non era strano solo un po 'non intuitivo. Quando si effettua un'unione, ha mostrato modifiche basate su due genitori diversi. E c'era un piccolo menu a discesa che ti permetteva di cambiare il genitore per vedere le modifiche corrispondenti ad esso. Ho pensato che sarebbe stato utile aggiornarlo qui in modo che le persone non avessero idee fuorvianti.
Una cosa che puoi fare funziona in modo diverso a seconda che tu abbia completato l'unione con cui ti presenta. Prima di completarlo, prova 'git diff HEAD ... HEAD @ {u}' (nota i tre punti, vedi i documenti 'git diff' per quello) per vedere quali modifiche vengono unite; dopo averlo completato, per vedere cosa è stato fatto, quando hai ottenuto l'unione, esegui 'git diff HEAD^... HEAD^2' (i due comandi usano solo diversi modi per specificare i suggerimenti su cui lavorare dato che tu? a partire da diversi commit). – jthill