git 模仿来自其他存储库的旧提交
git mimic old commit from other repository
为什么
在我们公司,我们开始使用一些开源代码并开始对其进行修补。我现在想进行这些更改 public,所以我想应用这些更改并提供正确的作者和作者日期(我不想把我没有做的工作归功于自己)。
问题
- 在
company-repo
中,我提交了 123456789
,我想模仿
- 在
new-repo
中,我准备了一个提交(使用 git add -p
)。
现在我想创建一个模仿来自 company-repo
的提交 123456789
的提交,但是在 new-repo
.
中创建此提交
想法
git commit -C
可以从另一个提交中获取 git 提交消息,但是失败了 (could not lookup commit
)
- 因为这是跨两个不同的存储库的,也许会创建一个补丁?但由于文件名已更改,这将很复杂
- 只是解析需要的信息并重复使用?应该复制什么?时间戳、提交消息、其他?
我不知道是否有更简单的方法,但我会解析 author、message 和 timestamp 并在提交时重用它们。
正确设置这两个变量:
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
。从技术上讲,提交是今天创建的,而作者很久以前就写了他的代码。
为什么
在我们公司,我们开始使用一些开源代码并开始对其进行修补。我现在想进行这些更改 public,所以我想应用这些更改并提供正确的作者和作者日期(我不想把我没有做的工作归功于自己)。
问题
- 在
company-repo
中,我提交了123456789
,我想模仿 - 在
new-repo
中,我准备了一个提交(使用git add -p
)。
现在我想创建一个模仿来自 company-repo
的提交 123456789
的提交,但是在 new-repo
.
想法
git commit -C
可以从另一个提交中获取 git 提交消息,但是失败了 (could not lookup commit
)- 因为这是跨两个不同的存储库的,也许会创建一个补丁?但由于文件名已更改,这将很复杂
- 只是解析需要的信息并重复使用?应该复制什么?时间戳、提交消息、其他?
我不知道是否有更简单的方法,但我会解析 author、message 和 timestamp 并在提交时重用它们。
正确设置这两个变量:
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
。从技术上讲,提交是今天创建的,而作者很久以前就写了他的代码。