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

标签 git gitlab git-reset

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

A -------.
          \--------.----------- B
                     \
                      .-------------- C

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

我怎样才能安全地做到这一点?

两者之间有超过 10 000 个不同的文件,因此无法手动操作。

我尝试了几种方法,包括 git merge 和“他们的”策略,但不知何故我仍然遇到很多冲突。

最佳答案

无论潜在冲突文件的数量或代码差异如何,这三个命令中的任何一个

# 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 相同的提交,使它们完全相同,代码和历史。没有冲突解决,没有 merge ,它是即时的。

请注意,这被认为是对 B 的重写的最近历史记录,所以如果您共享分支 B,则不要使用它与任何人。

它还会取消对 B 上的任何提交的引用在 C 之后是从它分支出来的,所以如果您有任何疑问,请事先备份B

git branch backup-B B

最后...您忘记备份并后悔了吗? git reflog将列出 HEAD 的先前位置, 你会发现 B在那里,用 git reset --hard <old position hash> 恢复它或使用 git branch recovered-B <old position hash> 在其上放置 Handlebars 以供检查/重复使用

关于GITLAB:如何将整个分支推送到另一个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537950/

相关文章:

Git Azure 部署缺少内容目录中的文件(MVC4 项目)

eclipse - 我是在 src 文件夹还是在我工作区的项目文件夹中运行 git init?

ldap - Gitlab: LDAP "Invalid credentials",但凭据是正确的

gitlab - 如何获取某个 CI_PIPELINE_IID 的 GitLab 管道?

git - 如何撤消git中的最后一次提交

git - 无法提交文件,意外地用 mv 重命名

git - 将文件添加到 GitHub 存储库

git - 如何在 GIT 推送期间忽略远程更改?

ssh - Gitlab 指纹已经被占用,部署 key 项目部署 key 指纹已经被占用

git - 什么是 `git restore` 命令, `git restore` 和 `git reset` 之间有什么区别?