git 模仿来自其他存储库的旧提交

git mimic old commit from other repository

为什么

在我们公司,我们开始使用一些开源代码并开始对其进行修补。我现在想进行这些更改 public,所以我想应用这些更改并提供正确的作者和作者日期(我不想把我没有做的工作归功于自己)。

问题

现在我想创建一个模仿来自 company-repo 的提交 123456789 的提交,但是在 new-repo.

中创建此提交

想法

我不知道是否有更简单的方法,但我会解析 authormessagetimestamp 并在提交时重用它们。

正确设置这两个变量:

OLDREPO=/path/to/company-repo
HASH=123456789 # hash of commit to mimic

然后您可以从旧提交中提取值:

DATE=$(git --git-dir=$OLDREPO/.git/ show --no-patch --no-notes --pretty='%cd' $HASH)
AUTHOR=$(git --git-dir=$OLDREPO/.git/ show --no-patch --no-notes --pretty='%an <%ae>' $HASH)
MESSAGE="$(git --git-dir=$OLDREPO/.git/ show --no-patch --no-notes --pretty='%B' $HASH)"

并将它们用于您的新提交:

git commit --author="$AUTHOR" --date="$DATE" -m "$MESSAGE"

注意: 我没有故意设置 GIT_COMMITTER_DATE。从技术上讲,提交是今天创建的,而作者很久以前就写了他的代码。