Я работал над локальной ветвью, а также удалял изменения на удаленный. Я хочу вернуть изменения в этой ветке и сделать что-то еще, но я не хочу полностью потерять работу. Я думал о чем-то вроде создания новой ветки локально и копирования старой ветки, тогда я могу отменить изменения и продолжить работу над старой ветвью. Может быть, лучший способ? Или как это сделать?
Как скопировать содержимое ветки в новую локальную ветвь?
Ответ 1
git checkout old_branch
git branch new_branch
Это даст вам новую ветку "new_branch" с тем же состоянием, что и "old_branch".
Эта команда может быть объединена со следующим:
git checkout -b new_branch old_branch
Ответ 2
git branch copyOfMyBranch MyBranch
Это позволяет избежать потенциально трудоемкого и ненужного действия проверки ветки. Напомним, что проверка изменяет "рабочее дерево", что может занять много времени, если оно велико или содержит большие файлы (например, изображения или видео).
Ответ 3
С Git 2.15 (Q4 2017) "git branch
" узнал "-c/-C
", чтобы создать новую ветвь, скопировав существующий.
См. commit c8b2cec (18 июня 2017 г.) Ævar Arnfjörð Bjarmason (avar
).
См. commit 52d59cc, совершить 5463caa (18 июня 2017 г.) ) Сахил Дуа (sahildua2305
).
(слияние Junio C Hamano - gitster
- в commit 3b48045, 03 Oct 2017)
branch
: добавьте параметр--copy
(-c
), чтобы перейти с--move
(-m
)Добавьте возможность
--copy
ветки и ее reflog и конфигурацию, это использует тот же базовый механизм, что и опция--move
(-m
) за исключением того, что reflog и конфигурация копируются вместо перемещения.Это полезно для, например, копирование ветки темы в новую версию, например
work
доwork-2
после отправки темыwork
в список, в то время как сохраняя всю информацию отслеживания и другую конфигурацию, которая идет с веткой, и в отличие от--move
сохранения другой уже представленной откройте для справки.
Примечание: при копировании ветки вы остаетесь в своей текущей ветке.
Как поясняет Юнио С Хамано:
При создании новой ветки
B
путем копирования веткиA
, которая происходит с быть текущей ветвью, она также обновляетHEAD
, чтобы указать на новую филиал.
Вероятно, это было сделано так, потому что "git branch -c A B
" реализовала свою реализацию на "git branch -m A B
",Это не соответствует обычным ожиданиям.
Если бы я сидел на синем кресле, а кто-то приходил и перекрашивал его до красных, я бы согласился вступить, сидя на стуле, который теперь красный (я тоже в порядке вместо этого, вместо того, чтобы больше не было моего любимого синего кресла).Но если кто-то создает новый красный стул, моделируя его после синего Я сижу на стуле, я не ожидаю, что вас уберут от синего стул и заканчивая сидящим на новом красном.