首页 > 解决方案 > 用 git 清理混乱的分支

问题描述

我似乎把一个小项目的开发分支弄得面目全非。我现在想要实现的是告诉 git 以下内容:嘿 git。这是名为 X 的分支。现在我在名为 Y 的分支中,它基于 X。请查看有什么区别,在一次提交中提交它们,然后也更新源。

背景:该项目位于 gitlab 存储库中。有一个名为 development 的开发分支(适当地),我正在修改它(分支,比如 january_dev)。现在由于不幸的情况,最好的描述是“我完全不知道我在做什么”,我已经搞砸了那个分支的历史。

不久前,我将我的 january_dev 重新定位在开发上,这意味着目前除了一个来自开发分支的提交之外,所有其他提交也都在我的分支中。

目前,在开发中重新定位分支的尝试最终会重播 january_dev 提交的整个历史,结果是一团糟,因为我工作了很多,在概念之间来回切换等等。所以,基本上,我不我对解决冲突没有信心。我想要的只是保持现状,重新基于“开发”,理论上这应该很容易,因为文件中只有两行代码我什至没有触及需要从开发到我的分支。

我知道我可以做的,并且我认为它会起作用的,将是:

  1. 基于开发分支创建一个新分支。称之为 january_dev2:git checkout -b january_dev2 && git push
  2. 从 january_dev 复制我一直在处理的文件。只有几个。
  3. git commit -a -m 'a new beginning'
  4. git push
  5. 将 january_dev2 重命名为 january_dev:git branch -m january_dev2 january_dev ; git push origin january_dev ; git push origin -u january_dev ; git push origin --delete january_dev2

然后我会放弃我的提交的整个历史,但我不在乎,也不需要它们。

你怎么看?

标签: gitversion-controlgitlab

解决方案


这是名为 X 的分支。现在我在名为 Y 的分支中,它基于 X。请查看有什么区别,在一次提交中提交它们,然后也更新源。

  1. git switch Y– 切换到您要保存的分支(您已经这样做了,但以防万一)。
  2. git switch -c tmp– 创建一个名为tmp以防万一的新临时分支。
  3. git reset X– 将您的分支指向与从分支保留工作树时tmp相同的提交。XY
  4. git add . && git commit– 记录单个提交之间X和中的所有更改。Y

因此,现在您的XandY分支保持与以前相同的状态,但是,此外,您还有一个名为的新分支tmp,它本质上是+ 一个包含andX之间差异的提交。XY

从您的描述中不清楚您想将什么推送到哪里,但是,根据您的需要,您现在可以执行或者git branch -f X相应git branch -f Y地更改您的XorY分支,使其与tmp. 然后你就像switch往常一样,push随心所欲。完成后,您可以git branch -D tmp


推荐阅读