Независимо от количества потенциально конфликтующих файлов или различий в коде, любая из этих трех команд
# if you don't need to checkout the branch immediately
git branch -f B C
# if you DO want to checkout the branch immediately
git checkout -B B C
# if you branch B is ALREADY checked out
git reset --hard C
сделает B
пункт на том же коммите, чем C
, делая их абсолютно идентичными, код и история. Нет разрешения конфликтов, нет слияний, это происходит мгновенно.
Обратите внимание, что это считается переписыванием недавней истории B
, поэтому его нельзя использовать, если вы делитесь веткой B
с кем-либо.
Также будет разыменован любой коммит, сделанный на B
после того, как C
был разветвлен, поэтому, если у вас есть какие-либо сомнения, заранее сделайте резервную копию B
с помощью
git branch backup-B B
Наконец ... вы забыли сделать резервную копию и пожалели? git reflog
перечислит предыдущие позиции HEAD
, вы найдете там B
, восстановите его с помощью git reset --hard <old position hash>
или наденьте на него ручку для проверки / повторного использования с git branch recovered-B <old position hash>