Ответ 1
Приведенные вами рабочие процессы не эквивалентны: при выполнении reset --hard
вы теряете все изменения в рабочем дереве (вы можете сделать это reset --soft
).
Вам нужно
git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
Я пишу несколько скриптов для моего рабочего процесса 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
).
Вам нужно
git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
Установите otherbranch
, чтобы указать тот же фиксатор, что и currentbranch
, запустив
git branch -f otherbranch currentbranch
Параметр -f
(force) сообщает git branch
да, я действительно хочу перезаписать любую существующую ссылку otherbranch
с новой.
В документации :
-f
--forceReset, если он уже существует. Без ветки -f git отказывается изменить существующую ветку.
Вы можете синхронизировать с этой командой свои ветки в любое время
$ git push . CurrentBranch:OtherBranch -f
Также без замены этого набора команд
$ git checkout OtherBranch
$ git merge CurrentBranch
$ git checkout CurrentBranch
Это может быть полезно, когда вам не нужно фиксировать все ваши файлы в CurrentBranch, и поэтому вы не можете переключиться на другие ветки.
Я пришел сюда в поисках более гибкого решения для установки состояния ветки.
Вот способ сделать полный сброс. Пожалуйста, убедитесь, что вы знаете, что делаете. Это может быть опасно.
git checkout <branchToReset>
git reset --hard <branchThatHasCorrectState>
git push --force
branchToReset теперь точно так же как и branchThatHasCorrectState branchToReset был обновлен на удаленном репо, чтобы иметь новое состояние. Все, что было в branchToReset и не существовало в branchThatHasCorrectState, больше не существует. Вы разрушаете историю, отсюда и опасная часть.