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

ser*_*i12 245 git branch

我曾经在一个本地分支机构工作,并将更改推送到远程.我想恢复该分支上的更改并对其执行其他操作,但我不想完全失去工作.我在考虑在本地创建一个新分支并在那里复制旧分支,然后我可以恢复更改并继续处理旧分支.还有更好的方法吗?或者我该怎么做?

Dan*_*rth 398

git checkout old_branch
git branch new_branch
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个新的分支"new_branch",其状态与"old_branch"相同.

此命令可以组合到以下内容:

git checkout -b new_branch old_branch
Run Code Online (Sandbox Code Playgroud)

  • 甚至更短的`git checkout -b new_branch`(当你已经在'old_branch`时). (120认同)
  • 我想如果一个人创建一个像这样的新分支,那么它不会立即拥有旧分支的副本,而只是旧分支头部的新指针.但是当你现在做一些像重新定义新分支的事情时,你应该看到旧分支在修改新分支时仍然处于其原始状态.所以我认为OP会做什么. (7认同)
  • 这只是创建新分支但无法将内容从一个分支复制到另一个分支.当我尝试这个命令时,它只显示"名为****的分支已经存在". (4认同)
  • git checkout old_branch 和 gitbranch new_branch ....最好在生产中使用上面的命令,因为下面的命令将创建新分支并将您带到新分支(将分支更改为新分支).... git checkout -b新分支 旧分支 (2认同)

Lyl*_*e Z 50

git branch copyOfMyBranch MyBranch
Run Code Online (Sandbox Code Playgroud)

这避免了检查分支的潜在耗时和不必要的行为.回想一下,结帐修改了"工作树",如果它很大或包含大文件(例如图像或视频),则可能需要很长时间.

  • 当然,如果您在 git 中有二进制文件,尤其是大文件,那么分析您针对所述文件的策略可能是值得的。当然,会存在不寻常的情况,并且在 git 中拥有二进制文件是完全可以接受的。 (2认同)

Von*_*onC 42

使用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 C Hamano合并- -提交3b48045,2017年10月3日)sahildua2305
gitster

branch:添加一个--copy(-c)选项与--move(-m)

添加--copy分支及其reflog和配置的功能,这使用与--move(-m)选项相同的底层机制,除了复制日志和配置而不是移动.

这是例如复制一个话题分支到一个新的版本,例如,有用workwork-2提交后work的话题列表,同时保留所有与分支而来的跟踪信息和其他配置,而不像--move周围保持其他已提交的分行参考.

注意:复制分支时,您将保留在当前分支上.
正如Junio C Hamano所说:

B通过复制A恰好是当前分支的分支来创建新分支时,它也会更新HEAD为指向新分支.
它可能是这样做的,因为" git branch -c A B"捎带它的实现" git branch -m A B",

这与通常的预期不符.
如果我坐在蓝色的椅子,有人来了,它重绘为红色,我会接受结束了坐在椅子上,现在是红色的(我也是确定的立场,而不是,因为不再是我最喜欢的蓝色椅子).

但如果有人创造了一把新的红色椅子,在我坐着的蓝色椅子上进行造型,我不希望从蓝色椅子上开始,最后坐在新的红色椅子上.

  • 这应该被接受。 (3认同)