Я пишу сценарии для рабочего процесса Git.
Мне нужно сбросить другую (существующую) ветку на текущую без проверки.
Перед:
CurrentBranch: commit A
OtherBranch: commit B
После:
CurrentBranch: commit A
OtherBranch: commit A
Эквивалент
$ git checkout otherbranch
$ git reset --soft currentbranch
$ git checkout currentbranch
(Примечание --soft
: я не хочу влиять на рабочее дерево.)
Это возможно?
Ответы:
Описанные вами рабочие процессы не эквивалентны: при выполнении
reset --hard
вы теряете все изменения в рабочем дереве (вы можете захотеть внести этоreset --soft
).Вам нужно
источник
refs/heads/
…git push . current:other
. Это работает безrefs/heads
(/ cc @elliottcable), а также не дает вам обновить извлеченную ветку. Обратите внимание, что вам может потребоваться передать -f (или использовать+current:other
), если обновление не является перемоткой вперед.-m 'some text'
аргумент для записи причины, по которой обновление ref будет отображатьсяgit reflog OtherBranch
командой, например «синхронизировано с CurrentBranch». Может быть, позже будет полезно вспомнить, зачем вы это сделали.git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
илиgit push . CurrentBranch OtherBranch
когда вы могли бы использоватьgit branch -f OtherBranch CurrentBranch
вместо этого намного более чистый (IMO) ? (См. Мой ответ на git branch -f ниже)Установите
otherbranch
точку в той же фиксации, что иcurrentbranch
при запускеОпция
-f
(force) говоритgit branch
да, я действительно хочу перезаписать любую существующуюotherbranch
ссылку новой .Из документации :
источник
fatal: Cannot force update the current branch.
при попытке это сделать.otherbranch
выписались. Этот вопрос SO конкретно касается сброса другой ветки на другую фиксацию (т.е. не сброса извлеченной ветки). Что вы хотите сделать, так это сбросить текущую ветку сgit reset targetbranch
помощью, чтобы указать текущую веткуtargetbranch
. Добавьте,--hard
чтобы принудительно добавить дерево работ к этому содержимому. Или--soft
оставить индекс в покое и изменить только саму ветку.branch -f
, что смогу это сделать.Вы можете синхронизировать с этой командой свои ветки в любое время
Также без -f он заменяет этот набор команд
Это может быть полезно, когда вам не нужно фиксировать все ваши файлы в CurrentBranch и вы не можете переключаться на другие ветки.
источник
-f
вариант, если он не является абсолютно неизбежным. В моем случае он хорошо работает без него.