GITLAB:如何将整个分支推送到另一个分支
我的目标很容易解释,但我找不到任何方法来实现。 假设我有3个分支。A、 B和CGITLAB:如何将整个分支推送到另一个分支,git,gitlab,Git,Gitlab,我的目标很容易解释,但我找不到任何方法来实现。 假设我有3个分支。A、 B和C A -------. \--------.----------- B \ .-------------- C 我只是想把整个分支“C”推到分支“B”上。让我解释一下:我不想保留我从B创建C之后在B中所做的任何事情。我只是想让B拥有与分支C完全相同的代码 我怎样才能安全地做到这一点 两者之间有超过10000个不同
A -------.
\--------.----------- B
\
.-------------- C
我只是想把整个分支“C”推到分支“B”上。让我解释一下:我不想保留我从B创建C之后在B中所做的任何事情。我只是想让B拥有与分支C完全相同的代码
我怎样才能安全地做到这一点
两者之间有超过10000个不同的文件,因此手动操作是不可取的
我尝试了一些东西,包括git合并和“他们的”策略,但不知何故,我仍然有很多冲突。不管潜在冲突文件的数量或代码的差异,这三个命令中的任何一个
# if you don't need to checkout the branch immediately
git branch -f B C
# if you DO want to checkout the branch immediately
git checkout -B B C
# if you branch B is ALREADY checked out
git reset --hard C
将使B
指向与C
相同的提交,使它们完全相同,代码和历史。没有冲突解决,没有合并,这是即时的
请注意,这被认为是对B
最近历史的重写,因此,如果您与任何人共享分支B
,则不可使用此选项。
在C
从B
分支后,它还将取消对B
上所做的任何提交的引用,因此如果您有任何疑问,请事先使用
git branch backup-B B
最后。。。你忘了备份,后悔了吗
git reflog
将列出HEAD
以前的位置,您将在那里找到B
,使用git reset--hard
恢复它,或者使用git branch recovered-B
在其上放置一个手柄,以便检查/重新使用git branch recovered-B
如果您只想放弃B
特有的所有更改,请删除它:
git branch -d B
签出C
并从中创建新的B
:
git checkout C
git branch B
B
现在与C
完全相同 检查B,然后重置磁头
git checkout B
git reset --hard C
没有
他们的策略。有一个-X他们的
选项,但这不是一个策略。Git称之为“策略选项”,这是一个坏名字:它听起来像是一个提供策略的选项,但实际上,它是另一个策略的选项,来自-s
选项,这里默认为-s recursive
。我将-X
称为“扩展选项”,以避免将其与-s
选项混淆
有关为什么没有-s-theres
(即使曾经有过)的说明,请参阅
这里的其他答案中的各种重置方法(git checkout-B
,git reset--hard
,等等)通常是解决方法。但是,如果您想轻松实现a-s他们的
策略的效果,请查看分支机构B是否与其他人共享?@Romanvaleri我目前正在独自处理此报告如果B没有被推,您需要使用-d
而不是-d
最佳解决方案,如果您还需要签出分支机构(一个线性变量git checkout-bc
)。