拉动时重写提交消息

时间:2020-09-29 11:24:16

标签: git git-pull

我正在将多个存储库合并到一个。为此,我将每个原始存储库添加为git add ...,然后运行git pull --no-edit --quiet --allow-unrelated-histories ...

我的问题是,是否可以同时重写提交消息,以便我可以在提交主题上添加标签,或者在提交主体上添加尾随。

编辑: 为了明确起见,我想重写所有带有更改的提交消息,而不是pull的合并消息

2 个答案:

答案 0 :(得分:1)

任何提交的任何部分都无法更改,因此从这个意义上讲,答案是否定的。

git pull命令实质上包括运行git fetch,然后运行git mergegit rebase。 rebase命令通过将现有提交复制到新的(以及不同的,可能是经过改进的)提交来起作用,因此从这种意义上讲,有一种方法可以获取所需的内容。但是git pull运行的基准只能复制您的提交,而不是已获取的提交。您似乎想将获​​取的提交复制到具有不同哈希ID的新的和改进的提交中。

为此,您必须分开操作。停止使用git pull。运行:

  • git fetch,以获得新的提交;然后
  • 您选择的将那些复制到新的和改进的提交中的方法;然后
  • git merge(如果需要),或者需要其他任何命令 (也许没有)。

作为一般规则,每当您尝试做一些花哨的事情时,关于如何使git pull做到这一点的答案就是“停止使用git pull”。 ?考虑一下git pull的作用,然后将其分解为有用的部分和无效的部分:通常fetch是有用的,有时第二个命令是有用的,但是通常希望在两者之间插入一些东西。

答案 1 :(得分:1)

提取提交时,您无法更改提交消息。

设计上不可能做到这一点。当您更改提交消息时,此提交的哈希会更改。在git中,只有提交消息不同的两个相同的提交始终具有不同的哈希值。因此,git始终将此类提交视为两个不同的提交。

pull假设将来自远程存储库的更改合并到本地存储库中。如果您在提取过程中重写提交消息,它将更改这些提交的哈希值。从git的角度来看,您将在本地仓库中获得另一个历史记录。这意味着合并尚未完成,您应该再次退出。

因此,您无法在提取提交时更改提交消息。但是您可以在提取后重写提交消息。您可以将git filter-branch--msg-filter选项一起使用来重写提交消息。

我建议您按下一个顺序进行操作:

  1. 从一个存储库中拉出提交
  2. 使用git filter-branch重写此存储库中的提交。 (这次,您的历史记录中只有诸如“#nnn” 之类的链接,因此您可以轻松地将其更改为“ first-repo-url / nnn” ))
  3. 从下一个存储库中拉出提交,然后重写其提交(这次来自上一个存储库的链接已经处理,因此您可以将它们与当前存储库中的链接分开)
相关问题