Сбросить другую ветку до текущей без кассы

Я пишу несколько скриптов для моего рабочего процесса Git.

Мне нужно сбросить другую (существующую) ветку на текущую, без проверки.

До:

 CurrentBranch: commit A
 OtherBranch: commit B

После:

 CurrentBranch: commit A
 OtherBranch: commit A

Эквивалент

 $ git checkout otherbranch 
 $ git reset --soft currentbranch
 $ git checkout currentbranch

(Примечание --soft: я не хочу влиять на рабочее дерево.)

Это возможно?

Ответ 1

Приведенные вами рабочие процессы не эквивалентны: при выполнении reset --hard вы теряете все изменения в рабочем дереве (вы можете сделать это reset --soft).

Вам нужно

git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch

Ответ 2

Установите otherbranch, чтобы указать тот же фиксатор, что и currentbranch, запустив

git branch -f otherbranch currentbranch

Параметр -f (force) сообщает git branch да, я действительно хочу перезаписать любую существующую ссылку otherbranch с новой.

В документации :

-f
--force

Reset, если он уже существует. Без ветки -f git отказывается изменить существующую ветку.

Ответ 3

Вы можете синхронизировать с этой командой свои ветки в любое время

$ git push . CurrentBranch:OtherBranch -f

Также без замены этого набора команд

$ git checkout OtherBranch
$ git merge CurrentBranch
$ git checkout CurrentBranch

Это может быть полезно, когда вам не нужно фиксировать все ваши файлы в CurrentBranch, и поэтому вы не можете переключиться на другие ветки.

Ответ 4

Я пришел сюда в поисках более гибкого решения для установки состояния ветки.

Вот способ сделать полный сброс. Пожалуйста, убедитесь, что вы знаете, что делаете. Это может быть опасно.

git checkout <branchToReset>
git reset --hard <branchThatHasCorrectState>
git push --force

branchToReset теперь точно так же как и branchThatHasCorrectState branchToReset был обновлен на удаленном репо, чтобы иметь новое состояние. Все, что было в branchToReset и не существовало в branchThatHasCorrectState, больше не существует. Вы разрушаете историю, отсюда и опасная часть.