2011-04-20 10:34:06 +0000 2011-04-20 10:34:06 +0000
235
235

Как сбросить 'master' в 'origin/master'?

Могу ли я сделать следующее проще?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Ответы (4)

343
343
343
2011-04-20 11:22:10 +0000

Как упоминается в 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, который является необязательным.

102
102
102
2014-08-24 19:30:10 +0000

Git поддерживает эту команду:

git checkout -B master origin/master

Check out the origin/master branch and then reset master branch there.

30
30
30
2013-01-23 20:48:07 +0000

Я думаю, что даже ответ VonC имеет сложность по сравнению с этой опцией:

git update-ref refs/heads/master origin/master
git reset --hard master

git автоматически регистрирует каждое значение ссылки (через рефлог). Поэтому после выполнения этой команды, master@{1} ссылается на предыдущее значение master.

Ответ VonC верен, но он тратит время на проверку старого значения master в файловой системе.

Если вас волнуют осиротевшие объекты в реплоге, то вы можете запустить git gc

22
22
22
2014-06-25 15:47:13 +0000

Если вы уже на master, вы можете сделать следующее:

git reset --hard origin/master

Он будет указывать локальную ветку master на удаленную origin/master и отбрасывать любые изменения в рабочем грязи.

Похожие вопросы

19
12
5
9
3