Вопрос по git-stash, git, git-reset, git-branch – Переместить существующую, незафиксированную работу в новую ветку в Git

2729

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

Как переместить существующие незафиксированные изменения в новую ветку и сбросить текущую?

Я хочу сбросить текущую ветку, сохранив при этом существующую работу над новой функцией.

Ваш Ответ

5   ответов
16

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

git cherry-pick <commitid>
</commitid>

Есть много, что вы можете сделать с вишней, как описаноВот, но это может быть вариантом использования для вас.

@Мередит, хаха, ты что-то в этом роде. Это здорово, если вы не планируете свои изменения заранее ... и кто это делает;) password
Хорошее решение для переноса частичных изменений в новую ветку ... так как вы можете зафиксировать то, что вы хотите сейчас, спрятать все другие изменения, проверить ветку, из которой вы хотите ветвиться, cherry-pick, которая фиксирует новую ветку, вернуться к исходной ветке, сделайте полный сброс назад коммита, затем сделайте трещотку, добавьте, зафиксируйте и пойте аллилуйя. Meredith
281

Сохранить текущие изменения во временном хранилище:

$ git stash

Создайте новую ветку на основе этого тайника и переключитесь на новую ветку:

$ git stash branch [email protected]{0}

Совет: используйте клавишу табуляции, чтобы уменьшить ввод имени тайника.

что значит@{0} имею в виду? Dennis
@mayu Не хочешь объяснить, почему? wickywills
youtu.be/KLEDKgMmbBI?t=548 fentas
Почему это лучше, чем принятый ответstackoverflow.com/a/1394804/754997? Chris Page
8

я забыл создать новую ветку для новой функции и делал всю работу в старой ветви функции. Я совершил все "старый» работать в главную ветку, и я хочу, чтобы моя новая ветка выросла измастер", Я не сделал ни одного коммита моей новой работы. Вот структура филиала:мастер "->"Old_feature»

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply
3193

git checkout -b <new-branch>
</new-branch>

Это оставит вашу текущую ветку как есть, создаст и извлечет новую ветку и сохранит все ваши изменения. Затем вы можете сделать коммит с помощью:

git add <files>
</files>

и добавьте в свою новую ветку:

git commit -m "<brief description="" of="" this="" commit="">"
</brief>

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

Ты несброс ваша оригинальная ветка, она остается как есть. Последний коммит на все равно будет так же. Поэтому тыcheckout -b а затем совершить.

@Fallenreaper: все промежуточные / неотмеченные / неотслеживаемые файлы сохранят свой статус. knittl
К вашему сведению: изменения в рабочем каталоге и внесенные в индекс изменения не относятся к ветви.git checkout -b  изменения, где эти изменения будут заканчиваться. Jakub Narębski
Что делать, если я уже побежалgit add .как мне перенести файлы в новую ветку? Razvan Zamfir
Это'Стоит отметить, что изменения, которые былидобавленной но нетпривержен на старой ветке будет безболезненно перенесен на новую ветку ». Fred Willmore
38

Если вы делаете коммиты в вашей основной ветке, пока вы кодировали, но теперь вы хотите переместить эти коммиты в другую ветку:

Скопируйте свою текущую историю в новую ветвь, включая все незафиксированные изменения:

git checkout -b <new-feature-branch>
</new-feature-branch>

Теперь заставь оригиналбеспорядочный" ветка для отката: (без переключения на нее)

git branch -f <previous-branch> <earlier-commit-id>
</earlier-commit-id></previous-branch>

Например:

git branch -f master origin/master

или если вы сделали 4 коммита:

git branch -f master HEAD~4

Предупреждение: Похоже, чтоgit branch -f master origin/master будутсбросить информацию об отслеживании для этой ветви. Так что если вы настроилиmaster ветвь, чтобы подтолкнуть куда-то, кромеorigin/master тогда эта конфигурация будет потеряна.

Альтернативой является использованиеэта техника сброса, Но эти инструкции откажутся от любых незафиксированных изменений, которые у вас есть. Если вы хотите сохранить их, сначала спрячьте их, а в конце распакуйте.

Это отвечает на вопрос, который немного отличается от того, что задал оператор. Я решил разместить этот ответ здесь, потому что это то, куда Google привел меня, когда я искал ответ. Актуальный вопрос, который касается этой ситуацииэто здесь. joeytwiddle

Похожие вопросы