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

Luc*_*asW 2 git gitlab

我的目标很容易解释,但是我找不到任何方法可以做到这一点。假设我有3个分支。A,B和C

A -------.
          \--------.----------- B
                     \
                      .-------------- C
Run Code Online (Sandbox Code Playgroud)

我只是想将整个分支“ C”推送到分支“ B”。让我解释一下:我不想保留从B创建C之后在B中所做的任何事情。我只是希望B具有与分支C完全相同的代码。

我如何安全地做到这一点?

两者之间的差异超过10000个文件,因此手动选择不是一种选择。

我尝试了几种方法,包括将git与“他们的”策略合并,但是我仍然存在很多冲突。

Rom*_*eri 5

不管潜在冲突文件的数量或代码的差异如何,这三个命令都可以

# 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
Run Code Online (Sandbox Code Playgroud)

B指向与相同的提交C,从而使它们完全相同,代码和历史记录。没有冲突解决,没有合并,它是瞬时的。

请注意,这被视为对B的最近历史记录的重写,因此,如果您要B与任何人共享分支,则不要使用此方法。

这也将间接引用任何提交发上B后,C被分流,所以如果您有任何疑问,请事先做好备份的B使用

git branch backup-B B
Run Code Online (Sandbox Code Playgroud)

最后...您忘记备份了,后悔了吗?git reflog会列出的先前位置HEAD,您将在B此处找到,恢复使用git reset --hard <old position hash>或将其放在上面以进行检查/重复使用git branch recovered-B <old position hash>