Подтвердить что ты не робот

Переключение ветвей, не касаясь рабочего дерева?

В настоящее время я нахожусь в ветке отладки и хочу переключиться на главную ветку, не изменяя рабочее дерево (оставьте это так, как оно есть в ветке отладки), поэтому я могу зафиксировать некоторые изменения в главном ветвь.

Есть ли способ сделать это?

4b9b3361

Ответ 1

Хотя вы должны быть осторожны с этой командой, вы можете reset направить указатель на мастер без изменения индекса или рабочего дерева с помощью:

git symbolic-ref HEAD refs/heads/master

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

git reset

После того, как вы сделали фиксацию, которую хотите сделать, вы можете вернуться в ветку отладки с помощью:

git symbolic-ref HEAD refs/heads/debug-branch
git reset

Ответ 2

Вы можете сделать следующее:

git checkout --detach
git reset --soft master
git checkout master

Пояснение:

Если вы находитесь в ветке debug и выполняете git reset --soft master, вы оставите рабочее дерево и индексируете нетронутым и перейдете к пунктам commit master. Проблема в том, что debug будет reset для этого фиксации тоже. Таким образом, ваши фиксации на debug "потеряны" (ну, не совсем, но они больше не доступны напрямую), и вы все еще находитесь в ветки debug.

Чтобы предотвратить перемещение git reset debug, но все еще установив HEAD в фиксацию master, сначала сделайте git checkout --detach, чтобы указать HEAD прямо на текущую фиксацию (см. man git-checkout, раздел "DETACHED HEAD" ). Затем вы можете сделать reset, не касаясь ветки debug.

Теперь HEAD указывает непосредственно на точку фиксации master, т.е. она все еще отсоединена. Вы можете просто git checkout master подключиться к master и теперь готовы к фиксации в ветки master.

Ответ 3

Вы можете зачеркнуть (git stash) свои изменения, переключить ветки, разблокировать (git stash pop) свои изменения, добавить и зафиксировать изменения.

Если вам нужно точное состояние отладки, просто слейте debug в master (или reset master для отладки).

Ответ 4

Ниже приведен пример рабочего процесса

 git stash
 git checkout otherbranch
 git stash apply
 git reset
 git add # interactively? just add the hunks/changes you want to commit
 git commit

И вернуться

 git reset --hard # watch it here! make sure you haven't added more changes that you wanted to keep
 git checkout debug
 git stash pop

В качестве альтернативы вы можете просто зафиксировать соответствующие изменения "здесь" и нажать/выбрать вишневый на главной ветке.

Ответ 5

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

Вы хотите merge ваши ветки. У

git checkout master
git merge devel

Теперь ветки будут синхронизированы. Если вы хотите объединить подмножество изменений, вы можете указать фиксацию или диапазон коммитов. Также посмотрите cherry-pick Например:

git checkout master
git cherry-pick devel

Слияние последнего фиксации в devel обратно в master.

Если вам нужно объединить две ветки, которые сидят на разных хостах, посмотрите на git pull и git push.