Когда вы создаете ветку saveme
, ваша история выглядит следующим образом:
A -- B -- C (saveme,master)
.... тогда, когда вы больше работаете над master
, чтобы справиться со сломанной библиотекой, ваша историявыглядит следующим образом:
A -- B -- C (saveme) -- D -- E (master)
Так что, если вы попытаетесь затем объединить saveme
в master
, появится сообщение «Уже обновлено», поскольку полная история saveme
уже содержится вmaster
.Звучит так, будто вы хотите создать коммит, который имеет то же дерево, что и saveme
, но это просто еще один коммит поверх master
.Вы можете сделать это, используя git revert
для коммита E
, а затем D
, но если вы хотите сделать это за один раз, вы можете сделать следующее:
# Check that "git status" is clean:
git status
# Set the index (staging area) to be as it was at the tip of the branch saveme:
git read-tree saveme
# Create a commit based on that index:
git commit -m "Going back to the state of the branch 'saveme'"
# Your working tree will still be as it was when you started, so
# you'll want to reset that to the new commit:
git reset --hard
(Этотривиальный вариант рецепта, который я предложил в этот ответ .) Тогда ваша история будет выглядеть так:
A -- B -- C (saveme) -- D -- E -- F (master)
... но дерево коммита F
будет таким же, какчто из коммита C
.