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

时间:2013-02-21 09:41:39

标签: git branch

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

4 个答案:

答案 0 :(得分:359)

git checkout old_branch
git branch new_branch

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

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

git checkout -b new_branch old_branch

答案 1 :(得分:49)

git branch copyOfMyBranch MyBranch

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

答案 2 :(得分:28)

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

commit c8b2cecÆvar Arnfjörð Bjarmason (avar)(2017年6月18日) 请commit 52d59cc查看commit 5463caaSahil Dua (sahildua2305)(2017年6月18日) Junio C Hamano -- gitster --于2017年10月3日commit 3b48045合并)

  

branch:添加--copy-c)选项以与--move-m

一起使用      

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

     

这对于例如将主题分支复制到新版本,   例如在将work主题提交到列表后,work-2work   保留所有跟踪信息和其他配置   与分支,而不是--move保持其他已提交   分支参考。

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

  

通过复制发生的分支B创建新分支A时   作为当前分支,它还会更新HEAD以指向新分支   分支。
  它可能是这样做的,因为“git branch -c A B”在“git branch -m A B”上搭载了它的实现,

     

这与通常的期望不符   如果我坐在蓝色的椅子上,有人来重新粉红色,我会接受最后坐在现在是红色的椅子上(我也可以   相反,因为不再是我最喜欢的蓝色椅子了。

     

但如果有人创造了一把新的红色椅子,那么在蓝色之后对其进行建模   我正坐在椅子上,我不指望从蓝色开始   坐在椅子上,最后坐在新的红色椅子上。

答案 3 :(得分:0)

鉴于您要求更好的方式选择:

复制分支的一个潜在缺陷是,如果您想合并到同一个父分支中,或者将更改从副本重新引入原始分支,则必须注意 git 的快进行为。

例如,如果您在“原始”分支中恢复了一些提交,但现在您想重新引入您恢复到原始分支的更改,则不能简单地将复制的分支合并到父分支,因为 git 会看到这些提交已经存在(甚至认为它们稍后会恢复)。

也许 cherry-pick [commit-range] 会在这种情况下工作并且不关心现有的哈希值 shrugs

在我看来,尽管这样做会更好。

  1. 从当前分支 HEAD git branch [archive-branch-name]
  2. 创建一个新分支
  3. 使用 git log 查找要回滚的提交
  4. 运行git reset --head [commit-hash-from-#2]
  5. git push -f origin

请注意,您从“原始”分支开始,并且在步骤中不要更改分支。

或者更简单地说,你可以完全取消分支,只恢复你想要恢复的提交,如果需要,revert the revert later