Как я могу скопировать содержимое ветки в новую локальную ветку?

270

Я работал в местном отделении, а также перенес изменения в удаленный. Я хочу отменить изменения в этой ветке и сделать что-то еще, но я не хочу полностью терять работу. Я думал о чем-то вроде создания новой ветки локально и скопирования туда старой ветки, тогда я могу отменить изменения и продолжить работу над старой веткой. Может быть, есть лучший способ? Или как мне это сделать?

serengeti12
источник
10
Через 4 года у вас будет Git 2.15 (4 квартал 2017 года) git branch -c A B. Смотрите мой ответ ниже
VonC

Ответы:

445
git checkout old_branch
git branch new_branch

Это даст вам новую ветку "new_branch" с тем же состоянием, что и "old_branch".

Эта команда может быть объединена со следующим:

git checkout -b new_branch old_branch
Дэниэл Хилгарт
источник
134
Или даже короче git checkout -b new_branch(когда вы уже включены old_branch).
Koraktor
4
Это просто создает новую ветку, но не может скопировать содержимое из одной ветви в другую. Когда я пробую эту команду, она просто показывает «Ветвь с именем **** уже существует».
anoop
7
Я думаю, что если кто-то создаст новую ветку, как эта, у нее не сразу будет копия старой ветки, а просто новый указатель в начале старой ветки. Но когда вы делаете что-то вроде перебазирования новой ветви, вы должны увидеть, что старая ветвь все еще находится в своем первоначальном состоянии, в то время как новая ветка изменена. Поэтому я думаю, что делает то, что хочет ОП.
uli_1973
1
git checkout old_branch и git branch new_branch .... Лучше использовать вышеупомянутую команду на производстве, так как приведенная ниже команда создаст новую ветку и перенесет вас в новую ветку (смените ветку на новую ветку) .... git checkout -b new_branch old_branch
Kiran
Для перезаписи ветки см stackoverflow.com/questions/26961371/...
MCCCS
55
git branch copyOfMyBranch MyBranch

Это позволяет избежать потенциально трудоемких и ненужных действий по проверке ветки. Напомним, что оформление заказа изменяет «рабочее дерево», которое может занять много времени, если оно большое или содержит большие файлы (например, изображения или видео).

Лайл Z
источник
1
Конечно, если у вас есть двоичные файлы в git, особенно большие, вероятно, стоит проанализировать вашу стратегию для указанных файлов. Естественно, будут необычные случаи, и наличие двоичных файлов в git будет вполне приемлемым.
Преподобный
52

В Git 2.15 (четвертый квартал 2017 года) git branch«научился» -c/-Cсоздавать новую ветку путем копирования существующей.

Смотрите коммит c8b2cec (18 июня 2017 г.), автор Ævar Arnfjörð Bjarmason ( avar) .
Смотрите коммит 52d59cc , коммит 5463caa (18 июня 2017 г.) от Sahil Dua ( sahildua2305) .
(Слиты Junio C Hamano - gitster- в фиксации 3b48045 , 03 окт 2017)

branch: добавить опцию --copy( -c), чтобы идти с --move( -m)

Добавьте возможность в --copyветку и ее reflog и конфигурацию, это использует тот же базовый механизм, что и опция --move( -m), за исключением того, что reflog и конфигурация копируются вместо перемещения.

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

Примечание: при копировании ветки вы остаетесь в своей текущей ветке.
Как объясняет Junio ​​C Hamano:

При создании новой ветви Bпутем копирования ветви, Aкоторая оказывается текущей, она также обновляется, HEADчтобы указывать на новую ветку.
Вероятно, это было сделано так, потому что " git branch -c A B" совмещал свою реализацию с " git branch -m A B",

Это не соответствует обычному ожиданию.
Если бы я сидел на синем стуле, а кто-то подошел и перекрасил его в красный, я бы согласился сесть на стул, который теперь красный (вместо этого я тоже в порядке, потому что моего любимого синего стула больше нет) ).

Но если кто-то создаст новый красный стул, смоделировав его после синего стула, на котором я сижу, я не ожидаю, что меня загрузят с синего стула и в конечном итоге он сядет на новый красный.

VonC
источник