Это то, что я часто использую:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Обратите внимание , что это хорошая практика , чтобы не вносить изменения в свой местный мастер / развивать отрасль, но вместо того, чтобы фотографии на другую ветку для каких - либо изменений, с именем ветви предварённого по типу изменения, например feat/
, chore/
, fix/
и т.д. Таким образом , вам нужно только тянуть изменения, а не выдвигать изменения от мастера. То же самое для других отраслей, которым способствуют другие. Таким образом, вышеприведенное следует использовать только в том случае, если вы зафиксировали изменения в ветке, в которую зафиксировали другие, и вам необходимо выполнить сброс. В противном случае в будущем избегайте нажатия на ветку, к которой другие подталкивают, вместо этого извлекайте и переходите к указанной ветке через извлеченную ветку.
Если вы хотите сбросить свою локальную ветвь до последнего коммита в ветке upstream, у меня пока работает:
Проверьте свои пульты, убедитесь, что ваш апстрим и источник - это то, что вы ожидаете, если не так, как ожидалось, тогда используйте git remote add upstream <insert URL>
, например, оригинальное репозиторий GitHub, с которого вы ответили, и / или 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
В GitHub вы также можете извлекать ветку с тем же именем, что и у локальной, чтобы сохранить там работу, хотя в этом нет необходимости, если в origin development есть те же изменения, что и в локальной ветке сохраненной работы. Я использую ветвь разработки в качестве примера, но это может быть любое существующее имя ветки.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Затем, если вам нужно объединить эти изменения с другой веткой, когда возникают конфликты, сохраняя изменения в разработке, используйте:
git merge -s recursive -X theirs develop
Во время использования
git merge -s recursive -X ours develop
чтобы сохранить конфликтующие изменения branch_name. В противном случае используйте mergetool с git mergetool
.
Со всеми изменениями вместе:
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;
Обратите внимание, что вместо upstream / development вы могли бы использовать хеш коммита, другое имя ветки и т. Д. Используйте инструмент CLI, такой как Oh My Zsh, чтобы проверить, что ваша ветвь имеет зеленый цвет, указывая, что нет ничего для фиксации, а рабочий каталог чистый ( что подтверждается или также проверяется git status
). Обратите внимание , что это может на самом деле добавить фиксации по сравнению с выше по течению развиваться , если есть что - то автоматически добавляет фиксацию, например , UML диаграммы, лицензионные заголовки и т.д., так что в этом случае, вы могли бы тянуть изменения на , origin develop
чтобы upstream develop
, в случае необходимости.
git status
ваша вторая командаgit reset --hard HEAD
не удалась. Вы не вставили его вывод, хотя. → Неполный вопрос.