【问题标题】:How to push & merge specific commit history?如何推送和合并特定的提交历史?
【发布时间】:2018-10-15 09:03:04
【问题描述】:

我从 Perfoce 将一个 Repo 及其所有历史克隆到本地 Git,将其命名为 SubProj,然后我将其推送到远程 repo,并使用该远程 repo 将 SubProj 合并到 SuperProj 下。

无法将部分历史记录从 Perforce 导入到 Git,@all 或 none。无论如何,一切顺利,我删除了本地仓库及其远程仓库。

现在,Perforce 仓库 SubProj 发生了变化,所以我再次克隆了 SubProj 的所有历史记录,我想推送然后与 SuperProj 合并,但我不想要整个历史记录(只有新的变化)。

说SubProj 有这段历史,并且是本地的:

A--B--C--D--E--F--G--H

我知道我们可以从最旧的提交开始推送,直到specific commit。例如:

git push SubProjRemote <commit C on master>:master

将A--B--C推送到遥控器。

但是:

我可以只将E--F--G--H 推送到远程仓库吗?

我可以全部推送,然后只合并E--F--G--H吗?

【问题讨论】:

  • Perforce 的两个克隆的 SHA-1 哈希值是否相同?换句话说,当您再次迁移时,E 的哈希值是否与远程仓库中第一次迁移时的哈希值相同?
  • @milbrandt 我无法验证,我删除了第一个克隆的存储库。现在我只有第二个克隆,它是 Git 存储库的整个历史。但我知道我想从哪个日期(什么提交)开始(例如E--F--G--H)。
  • 您只是在本地删除了它。第一次迁移的remote repo还是存在的吧?
  • @milbrandt 不,我删除了本地和远程。我将删除此评论,因为我在 OP 上有此评论
  • 您的远程项目是SuperProj。至少你没有做壁球提交,原始SubProj 的所有提交都应该包含在那里。

标签: git perforce git-merge git-push git-p4


【解决方案1】:

如果你想将一个分支的特定部分合并到另一个分支中,你可以使用 rebase 的 on 特性。一旦你在带有你想要的提交 + 额外提交的分支上,你可以运行:

git rebase --onto

对于您的示例,提交 E 到 H 但不是 A-D,您可以运行以下命令,将 D 和 H 替换为提交哈希:

git rebase --onto other_branch D H

该分支现在应该具有 other_branch 的基础,但它应该也应用了从 E 到 H 的提交。然后您可以将此分支推送到它需要去的任何地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-22
    • 2013-09-20
    • 2013-08-07
    • 1970-01-01
    • 2014-06-30
    • 2011-11-08
    • 2017-04-11
    • 2017-02-26
    相关资源
    最近更新 更多