假设有一个上游项目不使用 git,而我正在维护一个基于该项目已发布 tarball 的代码库。我维护一个 git 分支master
以及my
来自它的我的分支。我将这两个分支都发布在公共 git 存储库中。每当上游发布新的主要版本时,我都会创建一个与已发布 tarball 相同的新提交master
。然后,我将 的头部合并到master
,my
并发布这两个分支。
现在假设上游终于醒悟过来,将他们的 git 存储库公开。我希望master
从历史的这一刻起,我的轨迹与上游的轨迹保持一致。建议采取什么行动?我是否只需创建一个与上游master-2
完全相同的,然后从那里将其合并到上游my
,放弃旧的master
?
答案1
在本地存储库中,您可以:
- 使用 删除分支
git branch
,然后(如果需要)创建一个新的“master”分支。 - 使用 将分支重命名为其他名称
git branch
,然后可以选择创建一个新的分支。 git branch
使用或直接将“master”分支重新指向您想要的任何提交git reset
。
对于远程存储库,您可以:
- 使用 删除分支(推送删除)
git push --delete
。 - 使用您想要的任何提交覆盖分支
git push --force
。
如果您对其他人或系统使用的远程存储库执行此操作:
- 如果您使用不同的名称,其他人可以轻松地创建
git checkout
新的分支,但他们可能不会注意到更改,并对为什么“主”分支中突然没有活动感到困惑。 - 如果您将不同的历史记录放在同一个“主”分支中,每个人都会注意到它 - 但根据
git
他们使用的版本和更新命令,它要么停止并显示错误消息(需要一些手动清理),要么尝试合并两个历史记录(需要更多的手动清理)。