временно удалить код из ветки git master - PullRequest
1 голос
/ 24 октября 2011

У меня есть проект, отслеженный в git, который имеет главную ветку, которая становится версией для моего кода.У меня есть код в этой ветке, который вызывает проблемы, потому что внешняя библиотека, на которую он опирается, в настоящее время повреждена.Тем не менее, я ожидаю, что внешняя библиотека будет «исправлена» в какой-то момент в будущем (недели, так что stash на самом деле не то, что я хочу здесь) и что я хочу воскресить проблемный код.

Итак, вопрос:

Как сохранить код из ветки для дальнейшего использования?Если я просто создаю ветку с именем saveme, вносю изменения в основную ветку, а затем пытаюсь объединить saveme обратно в master, чтобы вернуть «сохраненный» код, это, похоже, приводит к «уже обновленной» версии.

1 Ответ

2 голосов
/ 24 октября 2011

Когда вы создаете ветку 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...