GITLAB:如何将整个分支推送到另一个分支

GITLAB:如何将整个分支推送到另一个分支,git,gitlab,Git,Gitlab,我的目标很容易解释,但我找不到任何方法来实现。 假设我有3个分支。A、 B和C A -------. \--------.----------- B \ .-------------- C 我只是想把整个分支“C”推到分支“B”上。让我解释一下:我不想保留我从B创建C之后在B中所做的任何事情。我只是想让B拥有与分支C完全相同的代码 我怎样才能安全地做到这一点 两者之间有超过10000个不同

我的目标很容易解释,但我找不到任何方法来实现。 假设我有3个分支。A、 B和C

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
)。