Я случайно работал над веткой, которой я не должен был какое-то время быть, поэтому я отделился от нее, дав ей подходящее название. Теперь я хочу переписать ветку, на которой я не должен был работать, до версии от origin (github). Есть простой способ сделать это? Я попытался удалить ветку, а затем сбросить ветку отслеживания, но она просто дает мне версию, над которой я снова работал.
440
git switch -C mybranch origin/mybranch
. Смотрите мой отредактированный ответ нижеОтветы:
Если вы еще не нажали на источник, вы можете сбросить свою ветвь в восходящую ветвь с помощью:
(Убедитесь, что вы ссылаетесь на ваш последний коммит в отдельной ветке, как вы упомянули в своем вопросе)
Обратите внимание, что сразу после сброса,
mybranch@{1}
ссылается на старый коммит, до сброса.Но если вы уже нажали, см. « Создание ветки git и возврат исходного состояния в исходное состояние » для других опций.
С Git 2.23 (август 2019) , которая была бы одна команда:
git switch
.А именно:
git switch -C mybranch origin/mybranch
пример
Это восстанавливает индекс и рабочее дерево, как если
git reset --hard
бы.Как прокомментировал Брэд Герман ,
reset --hard
бы удалить любой новый файл или восстановить измененный файл ГОЛОВУ .На самом деле, чтобы быть уверенным, что вы начинаете с «чистого листа»,
git clean -f -d
после сброса гарантируется, что рабочее дерево будет точно таким же, как ветвь, в которую вы только что сбросили.Этот пост в блоге предлагает эти псевдонимы (
master
только для веток, но вы можете адаптировать / расширить их):источник
git reset --hard origin/mybranch
команду несколько раз, когда меня не волновали какие-либо локальные изменения, и я просто хотел получить чистую копию, которая соответствует оригиналу. Тем не менее, сегодня это не сработало - у меня все еще было несколько новых, неустановленных файлов, и git продолжал обещать мне, что это было в HEAD. Заметка оgit clean -f -d
том, что исправил это, уничтожив все новые файлы, которые я не хотел.git reset --hard HEAD
чтобы вернуться к предыдущемуПредполагая, что это то, что произошло:
Тогда вы понимаете, что вносите изменения не в ту ветку.
Но
master
все же указывает на ваш коммит. Вы хотите, чтобы это указывало туда, куда оно указывало ранее.Решение
Самый простой способ это:
Другой способ это:
Обратите внимание, что использование
reset --hard
приведет к потере незафиксированных изменений (tests.py
в моем примере).источник
У меня есть частное репо на сервере, и я регулярно перезагружаюсь / принудительно нажимаю на него, что делает необходимым часто перезагружать локальную ветку на моем другом компьютере. Поэтому я создал следующий псевдоним "catchup", который позволяет делать это для текущей ветви. В отличие от другого ответа в этом псевдониме нет жестко закодированного имени ветви.
Держись крепче.
Правильно отформатированный (не будет работать с символами новой строки в .gitconfig) это выглядит так:
\\033[0;33m
И\\033[0m
является для выделения текущей ветви и выше с цветом.$(git symbolic-ref -q --short HEAD)
текущее название ветви$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
вверх по течению от текущей ветви.Поскольку сброс - это потенциально опасный вызов (особенно с параметром --hard, вы потеряете все незафиксированные изменения), он сначала сообщает вам, что он собирается делать. Например, если вы находитесь в ветке dev-container с удаленным именем qcpp / dev-container и вводите
git catchup
, вам будет предложено:Если вы затем наберете y или просто нажмете клавишу return, произойдет сброс. Если вы введете что-либо еще, сброс не будет выполнен.
Если вы хотите быть сверхбезопасным и программно предотвратить потерю непостановленных / незафиксированных изменений, вы можете дополнительно увеличить указанный выше псевдоним с помощью соответствующих проверок diff-index .
Обязательное предупреждение: если вы работаете с публичным хранилищем, на котором работают другие люди, и вам нужен этот псевдоним, вы делаете это неправильно ™ .
источник
Я попробовал это, и это не сбросило мою текущую ветку на мой удаленный GitHub последней. Я гуглил и нашел https://itsyndicate.org/blog/how-to-use-git-force-pull-properly/
который предложил
Я хотел сбросить ветку V8, поэтому я сделал
и это сработало
источник