Questo è quello che uso spesso:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Si noti che è buona pratica di non apportare modifiche al tuo padrone locale / sviluppare ramo, ma invece cassa ad un altro ramo per ogni cambiamento, con il nome del ramo preposto per il tipo di modifica, ad esempio feat/
, chore/
, fix/
, ecc Così si solo bisogno di estrarre le modifiche, non inviare alcuna modifica dal master. Stessa cosa per altri settori a cui altri contribuiscono. Quindi, quanto sopra dovrebbe essere usato solo se ti è capitato di eseguire il commit delle modifiche in una succursale a cui altri si sono impegnati e che è necessario ripristinare. Altrimenti, in futuro, evitare di spingere verso un ramo verso il quale gli altri spingono, invece fare il checkout e spingere verso quel ramo tramite il ramo estratto.
Se vuoi reimpostare il tuo ramo locale sull'ultimo commit nel ramo a monte, quello che funziona per me finora è:
Controlla i telecomandi, assicurati che l'upstream e l'origine siano quelli che ti aspetti, se non come previsto, quindi utilizza git remote add upstream <insert URL>
, ad esempio, il repository GitHub originale da cui hai effettuato la forchetta e / o git remote add origin <insert URL of the forked GitHub repo>
.
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
Su GitHub, puoi anche fare il checkout del ramo con lo stesso nome di quello locale, al fine di salvare lì il lavoro, sebbene ciò non sia necessario se origin sviluppo ha le stesse modifiche del ramo del lavoro salvato locale. Sto usando il ramo di sviluppo come esempio, ma può essere qualsiasi nome di ramo esistente.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Quindi, se è necessario unire queste modifiche con un altro ramo mentre ci sono conflitti, preservando le modifiche in sviluppo, utilizzare:
git merge -s recursive -X theirs develop
Durante l'uso
git merge -s recursive -X ours develop
per preservare le modifiche contrastanti di branch_name. Altrimenti usa un mergetool con git mergetool
.
Con tutte le modifiche insieme:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
Nota che invece di upstream / sviluppo puoi usare un hash di commit, un altro nome di ramo, ecc. Usa uno strumento CLI come Oh My Zsh per verificare che il tuo ramo sia verde indicando che non c'è nulla da impegnare e che la directory di lavoro sia pulita ( che è confermato o anche verificabile da git status
). Si noti che questo può effettivamente aggiungere commit rispetto al monte sviluppare se c'è qualcosa di aggiunto automaticamente da un commit, ad esempio diagrammi UML, intestazioni di licenza, ecc, quindi in questo caso, si potrebbe poi tirare le modifiche su origin develop
di upstream develop
, se necessario.
git status
tuo secondo comandogit reset --hard HEAD
fallito. Non hai incollato il suo output, però. → Domanda incompleta.