Как сбросить 'master' в 'origin/master'?
Могу ли я сделать следующее проще?
git checkout origin/master
git branch -D master
git branch master
git checkout master
Могу ли я сделать следующее проще?
git checkout origin/master
git branch -D master
git branch master
git checkout master
Как упоминается в KindDragon ’s answer , вы можете воссоздать master
прямо в origin/master
с:
git checkout -B master origin/master
Страница git checkout
man page упоминает:
Если -B
дано, <new_branch>
создается, если его не существует; в противном случае, он сбрасывается. Это транзакционный эквивалент
$ git branch -f <branch> [<start point>]
$ git checkout <branch>
Since Git 2. 23+ (август 2019 года), так как git checkout
слишком запутан , новая (всё ещё экспериментальная) команда - * git switch
**:
git switch -C master origin/master
То есть:
-C <new-branch> --force-create <new-branch>
Аналогично
--create
, за исключением того, что если<new-branch>
уже существует, то он будет сброшен на<start-point>
.
Это удобный ярлык для:$ git branch -f <new-branch> $ git switch <new-branch>
_Оригинально предложено:
Кое-что вроде:
$ git checkout master
# remember where the master was referencing to
$ git branch previous_master
# Reset master back to origin/master
$ git reset --hard origin/master
с шагом 2, который является необязательным.
Git поддерживает эту команду:
git checkout -B master origin/master
Check out the origin/master
branch and then reset master
branch there.
Я думаю, что даже ответ VonC имеет сложность по сравнению с этой опцией:
git update-ref refs/heads/master origin/master
git reset --hard master
git автоматически регистрирует каждое значение ссылки (через рефлог). Поэтому после выполнения этой команды, master@{1}
ссылается на предыдущее значение master.
Ответ VonC верен, но он тратит время на проверку старого значения master в файловой системе.
Если вас волнуют осиротевшие объекты в реплоге, то вы можете запустить git gc