【问题标题】:git rebase issue reorderinggit rebase 问题重新排序
【发布时间】:2017-03-14 05:05:43
【问题描述】:

我在重新构建 git 提交时遇到了问题。问题是:

pick A
pick B <- mine
pick C 
pick D
pick E <- mine
pick F <- mine

我想将我的所有提交压缩为一个。我打算这样做:

pick A
pick C 
pick D
pick B <- mine
squash E <- mine
squash F <- mine

但这不起作用,因为如果我执行此git rebase,则提交 A、C 和 D 也将是我的。如果我只是删除从 A 到 D 的行,只留下:

pick B <- mine
squash E <- mine
squash F <- mine

提交 A、C 和 D 将被删除。我该如何处理?

谢谢

【问题讨论】:

  • “因为如果我执行这个 git rebase,commmit A、C 和 D 也将是我的”不,不应该是这样。您将成为他们的提交者,但不是作者。
  • 但是我认为对于一个操作系统项目的 PR 来说,在你没有做过的事情上成为提交者会有点奇怪,对吧?
  • 并非如此。 Committer 并不是特别重要的信息,如果你正在重写提交,那么假装你没有这样做没有多大意义。不过,在这种特殊情况下,您可以改用 A 并保存一个更改(因为您没有更改它)。
  • 我看到的另一个问题是:在 github 中,我看到最后 3 次提交是我的(B、E、F)。 git log 也一样。但是当我使用git rebase -i HEAD~3 时,我的提交与git log 的顺序不同。
  • rebase 显示从最旧到最新的提交。日志正好相反。

标签: git github git-rebase


【解决方案1】:

How can I rebase a commit made by another author without adding myself as the committer? 中所述,您可以尝试更改GIT_COMMITTER_NAME/EMAIL 变量,但这将适用于所有 次提交。

另一种方法是执行你的变基,然后用git filter-branch 完成它以仅更改ACD

git filter-branch --commit-filter \
  'export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; \
   export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; \
   export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; \
   git commit-tree "$@"' -- D..HEAD

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多