【问题标题】:Git commit, then rebase from master, then making small changes to the original commitGit 提交,然后从 master 变基,然后对原始提交进行小的更改
【发布时间】:2016-06-16 17:14:52
【问题描述】:

好的,这个有点复杂,很可能非常具体。让我试着解释一下。

假设我将这个 git repo 拉到我的本地驱动器中。然后进行一些更改。由于这些更改位于许多不同的文件中并且针对不同的目标,因此提交不止一个。假设这些更改的提交具有哈希值ab001 to ab005(五次提交)。然后我创建了一系列补丁并发送到社区进行审查。

同时,假设我意识到主仓库已更改退出,所以我需要重新设置基准。我这样做,解决了所有的冲突。现在这将导致另一个提交,比如说ab006

一切都好。

但是第二天我得到了关于上一个补丁的 cmets 和建议(一个包含 5 次提交的补丁)。因此,我现在必须根据这些 cmets 进行一些更改,并发送旧补丁的 v2(版本 2)(即 5 次提交)。所以我必须取消提交这 5 个提交,进行更改并再次提交并创建另一个补丁(使用这 5 个提交)。

我将如何进行此操作,我无法取消提交,因为 HEAD 中有一个 rebase 提交。我真的很困惑。

【问题讨论】:

  • git 文档建议您应该在新提交中进行更改,而不是修改已有的提交。请参阅“从上游 Rebase 中恢复”部分,git-scm.com/docs/git-rebase
  • @declan,真的。但是对于每一个小的更改和建议,我都无法发送增量提交。它看起来很草率,并且审阅者对以前的更改失去了把握(因为它还没有被合并)。
  • 当然,很公平。
  • 如果我在这种情况下,我会“撤消”引入最新 master 更改的 rebase,然后对 ab001-ab005 进行更改,在 master 上重做 rebase。这种方法对你有用吗?如果是这样,我可以提供更多详细信息。
  • @declan,是的,这可行,但每次我都必须解决冲突。很累。

标签: git version-control patch git-commit


【解决方案1】:

您可以“撤消”来自 master 的 rebase,然后将提交的 ab001 修改为 ab005

git log

# commit ab005
# Fifth commit on the topic branch
# ...
#
# commit ab001
# First commit on the topic branch
#
# commit xy999
# Last commit on master before I started this new branch

git reset --hard xy999
git cherry-pick ab001
...
git cherry-pick ab005

现在您的历史记录是干净的,您可以修改主题分支提交。如有必要,您可以将 rebase 重做到 master 上,但如果可能的话,我建议等到这个分支中的工作完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2011-04-10
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2011-12-19
    相关资源
    最近更新 更多