2011-10-24 2 views
1

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

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

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

ответ

2

При создании 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 

(Это тривиальный вариант рецепта я предложил в . this answer) Тогда ваша история будет выглядеть следующим образом:

A -- B -- C (saveme) -- D -- E -- F (master) 

... но дерево коммиттерских F будет таким же, как и совершить C.

Смежные вопросы