如何将分支的内容复制到新的本地分支?


270

我曾在本地分支机构工作,也将更改推送到远程。我想还原该分支上的更改并对其进行其他操作,但是我不想完全失去工作。我在想类似在本地创建一个新分支并在其中复制旧分支,然后可以还原所做的更改并继续在旧分支上工作的想法。也许有更好的方法吗?或者我该怎么做?


10
4年后,使用Git 2.15(2017年第四季度),您将拥有git branch -c A B。请参阅下面的答案
VonC

Answers:


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
我认为,如果像这样创建一个新分支,则不会立即拥有旧分支的副本,而只是在旧分支的开头有了新的指针。但是,当您现在执行诸如重新设置新分支基准之类的操作时,您应该看到在修改新分支时,旧分支仍处于其原始状态。所以我认为这是OP想要的。
uli_1973

1
git checkout old_branch和git branch new_branch ....最好在生产中使用上述命令,因为以下命令将创建新分支并将您带到新分支(将分支更改为new分支)...。git checkout -b new_branch old_branch
Kiran


55
git branch copyOfMyBranch MyBranch

这避免了签出分支的潜在耗时和不必要的操作。回想一下,检出会修改“工作树”,如果它很大或包含大文件(例如,图像或视频),则可能会花费很长时间。


1
当然,如果您在git中有二进制文件,尤其是大型文件,则有必要分析上述文件的策略。自然,异常情况将存在,并且在git中包含二进制文件将是完全可以接受的。
敬请

52

在Git 2.15(2017年第4季度)中,“ git branch学习了” -c/-C通过复制现有分支来创建新分支。

参见提交c8b2cec(2017年6月18日)由ÆvarArnfjörðBjarmason( )avar
参见Sahil Dua(提交52d59cc提交5463caa(2017年6月18日(通过合并JUNIOÇ滨野- -提交3b48045,2017年10月3日)sahildua2305
gitster

branch:添加--copy-c)选项以与--move-m)一起使用

--copy为分支及其引用日志和配置添加功能,这与--move-m)选项使用相同的基础机制,除了引用日志和配置是复制而不是移动之外。

这对于例如将主题分支复制到新版本(例如workwork-2在将work主题提交到列表之后),同时保留所有与分支一起的跟踪信息和其他配置非常有用,并且不同于--move保留其他已经提交的分支参考。

注意:复制分支时,您将保留在当前分支上。
正如Junio C Hamano解释的那样:

B通过复制A碰巧是当前分支的分支来创建新分支时,它也会更新HEAD以指向新分支。
之所以这样做,是因为“ git branch -c A B”在“ git branch -m A B” 上搭载了其实现,

这与通常的预期不符。
如果我坐在蓝色的椅子上,有人来将它重新粉刷成红色,我会接受坐在最后变成红色的椅子上(我也可以站立,因为我最喜欢的蓝色椅子不再)。

但是,如果有人创建了一个新的红色椅子,并以我坐在蓝色椅子上为模型,则我不希望它从蓝色椅子上脱下,然后坐在新的红色椅子上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.