Это то, что я часто использую:
git fetch upstream master;
git reset --hard upstream/master;
git clean -d --force;
Обратите внимание, что хорошей практикой является не вносить изменения в ваш локальный мастер, а вместо этого извлекать изменения в другую ветку с именем ветви, к которому добавляется тип изменения, например, feat/
, chore/
, fix/
и т. Д. Таким образом, вам нужно только извлекать изменения, а не выталкивать изменения из мастера. То же самое для других отраслей, которым способствуют другие. Таким образом, вышеприведенное следует использовать только в том случае, если вы зафиксировали изменения в ветке, в которую зафиксировали другие, и вам необходимо выполнить сброс. В противном случае в будущем избегайте нажатия на ветку, к которой другие подталкивают, вместо этого извлекайте и переходите к указанной ветке через извлеченную ветку.
Если вы хотите сбросить локальную ветвь до последнего коммита в ветке восходящей ветки, у меня пока работает:
Проверьте пульты ДУ, убедитесь, что ваш восходящий и исходный порты соответствуют вашим ожиданиям, если не так, как ожидалось, используйте 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
.