我曾在一家本地分公司工作,并将更改推送到远程。我想恢复该分支上的更改并对其执行其他操作,但我不想完全失去工作。我在考虑在本地创建一个新分支并在那里复制旧分支,然后我可以恢复更改并继续处理旧分支。还有更好的方法吗?或者我该怎么做?
答案 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 5463caa,Sahil 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-2
到work
保留所有跟踪信息和其他配置 与分支,而不是--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
在我看来,尽管这样做会更好。
git branch [archive-branch-name]
git log
查找要回滚的提交git reset --head [commit-hash-from-#2]
git push -f origin
请注意,您从“原始”分支开始,并且在步骤中不要更改分支。
或者更简单地说,你可以完全取消分支,只恢复你想要恢复的提交,如果需要,revert the revert later