Git 拉取时重写提交消息

Git 拉取时重写提交消息,git,git-pull,Git,Git Pull,我正在将多个回购合并为一个。为此,我使用git add…添加每个原始回购协议,然后运行git pull--无编辑--安静--允许不相关的历史记录… 我的问题是是否可以同时重写提交消息,以便我可以向提交主题添加标签或向提交主体添加预告 编辑: 为了澄清,我想用更改重写所有提交消息,而不是pull的merge消息。任何提交的任何部分都不能更改,因此从这个意义上说,答案是否定的 git pull命令本质上包括运行git fetch,然后运行git merge或git rebase。rebase命令的工

我正在将多个回购合并为一个。为此,我使用
git add…
添加每个原始回购协议,然后运行
git pull--无编辑--安静--允许不相关的历史记录…

我的问题是是否可以同时重写提交消息,以便我可以向提交主题添加标签或向提交主体添加预告

编辑:
为了澄清,我想用更改重写所有提交消息,而不是pull的merge消息。任何提交的任何部分都不能更改,因此从这个意义上说,答案是否定的

git pull
命令本质上包括运行
git fetch
,然后运行
git merge
git rebase
。rebase命令的工作原理是将现有的提交复制到新的(和不同的,可能是改进的)提交,因此从这个意义上讲,有一种方法可以获得您想要的东西。但是,
git pull
运行的rebase只复制您的提交,而不是获取的提交;您似乎希望使用不同的哈希ID将获取的提交复制到新的和改进的提交

要做到这一点,您必须分离您的操作。停止使用git pull。运行:

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

一般来说,每当你尝试做一些新奇的事情时,关于如何使
git-pull
do-it的问题的答案就是“停止使用
git-pull
” 拉取提交时不能更改提交消息

这决不是故意的。当您更改提交消息时,此提交的哈希将更改。只有提交消息不同的两个相同的提交将具有不同的哈希。所以Git总是认为这样的提交是两个不同的提交。< /P>
pull
应该将远程存储库中的更改合并到本地存储库中。如果在拉过程中重写提交消息,它将更改这些提交的哈希值。从git的角度来看,您最终将在本地回购中获得另一个历史记录。这意味着合并没有完成,你应该再拉一次

因此,在拉取提交时不能更改提交消息。但您可以在拉取后重写提交消息。您可以使用with
--msg filter
选项重写提交消息

我建议您在下一个订单中这样做:

  • 从一个存储库中提取提交
  • 使用
    git过滤器分支
    重写此存储库中的提交。(这一次,您的历史记录中只有类似“#nnn”的链接,因此您可以轻松地将它们更改为“首次回购url/nnn”)
  • 从下一个存储库中提取提交,然后重写这些提交(这一次,来自上一个存储库的链接已被处理,因此您可以将它们与来自当前存储库的链接分离)

  • 删除
    --no edit
    --no edit
    用于在拉取时添加的合并消息,我想更改拉取时出现的所有提交消息,如果在合并不相关的历史记录后仍要保留合并提交,则它们是百分之一百,您可以重新设置所有提交的基础并重新写入它们。@Mcm通过更改所有提交消息,
    git filter branch
    git-rebase-i
    会有所帮助。但是他们重写了整个历史记录。重写历史记录不是问题,但我只想重写我要合并的特定存储库的提交,这样我就可以将诸如“#nnn”之类的链接更改为“”。每个回购都有一个不同的链接谢谢,最后我使用了你的建议,
    git filter branch--msg filter“perl-pe的,([\(]|)?([\)]),\$1mycompany/myproject/\$2\$3,g'
    work@Mcm我很高兴这有帮助