【问题标题】:How to get reference to commits in git如何在 git 中获取对提交的引用
【发布时间】:2018-10-03 08:13:44
【问题描述】:

让我们有一个 git master 分支,并在某个时刻让 fork 分支发布(发布分支将被称为 R1)。有时我需要向他们(master 和 R1)推送提交。通常我在 master 分支上工作,完成后我对其进行测试,挑选到 R1,在那里测试并推送到它们。

我想在 R1 提交中引用 master 分支。这是由cherry-pick -x 完成的。但是,这种方法仅在我推送到主分支然后从主分支到 R1 时才有效。假设测试花费了太多时间,我希望 master 和 R1 尽可能多地同步(我想最小化推送之间的时间间隔),所以我想同时推送。通过这种方式,我无法获得参考(cherry-pick 中的 -x),因为在 R1 中进行 rebase 时哈希会改变(不能使用合并)。 有什么办法可以自动化这个,所以我会在 R1 描述中有正确的散列?像哈希预测之类的东西?

【问题讨论】:

  • 这里真正的问题是您的工作流程,它似乎有机会在功能分支中进行提交,然后再将该提交挑选回 master。如果您有适当的合并或变基工作流程,您可能根本不必使用cherry-pick。我的投票是修复您的工作流程,然后除非绝对必要,否则避免使用cherry-pick。
  • 实际上我无法推送到 R1 然后返回到 master。归根结底,这不会解决我的问题,我仍然需要对其进行测试并将其推送到两个分支,并在 R1 中引用主提交。
  • 你不能真的用cherry-picking来做到这一点,因为cherry-picking会创建一个new提交。该提交可能在功能上与原始提交相同,但是 SHA-1 不同。如果你想共享同一个提交,那么你需要合并或变基之类的东西。
  • 我认为我们不在同一个页面上。我根本不想共享相同的提交,我只想在 R1 的 commit2 中引用对 master 的 commit1。如果您将 commit1 提交到 master 分支,然后使用 -x to R1 对其进行樱桃挑选,您将在描述中得到类似 cherry pick from commit 98073c13... 的内容,这正是我想要的有
  • 所以你说你想将提交推送到master,然后在master 上重新设置R1,然后有人会自动从master 重新提交提交添加了参考消息?对吗?

标签: git git-rebase cherry-pick git-hash


【解决方案1】:

有什么办法可以自动化这个,所以我会在 R1 描述中有正确的散列?像哈希预测之类的东西?

简短的回答是否定的。

更长的答案仍然是否定的,但您可能不需要预测哈希。这里的问题是您正在将一些修复提交(我们称之为F)从master 复制到另一个分支。我们称之为-xcherry-picked 复制提交Fx。您也可能最终将修复提交复制到新的修复提交,因为您避免在此工作流程中使用 git merge,因此如果 master 获得了新提交,您可以使用 rebase 将 F 挑选到一个新的提交F',您将添加到master,现在您想用F' 的精选副本替换您的Fx——F 的精选副本。

所以,你可以这样做。如果您将提交F 变基为F',请从另一个分支中剥离Fx 并重新运行git cherry-pick -x 以将F' 复制到Fx'。您已经知道这些是哪些提交,因为您拥有 F 的原始哈希 ID,并且樱桃采摘(通过变基)产生 F';你在Fx 中有F 的哈希ID。缺点是这会在另一个分支上重新复制所有提交之后 Fx,因为“从另一个分支剥离Fx”可能很重要。

(一种替代方法,一种避免所有这些大惊小怪的方法,是将修复合并到两个分支中。请参阅How to do a partial merge in git? 和链接的博客文章。)

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 2012-02-21
    • 2017-10-22
    • 2021-03-29
    • 1970-01-01
    • 2011-06-28
    • 2018-10-01
    • 2010-12-18
    • 2015-09-19
    相关资源
    最近更新 更多