问题描述
我从第三方存储库中提取了一个子树,对其进行了一些更改,现在想将这些贡献回上游。我想以这样的方式压缩我的更改,以免将噪声从我的子树设置推送到它们。
Git subtree 的帮助说明了 --rejoin
:
如果您使用 --squash 进行所有合并,则在拆分时不要使用 --rejoin,因为无论如何您都不希望子项目的历史记录成为您项目的一部分。
这似乎符合我想要实现的目标,但如果有的话,我找不到正确的方法。
这些是我尝试过的步骤(以不同的 3rd 方存储库为例):
git clone https://github.com/githubtraining/training-manual
cd training-manual
# First trying without rejoin,trying to follow Git's help
git subtree split --prefix=script -b split-script
git checkout split-script
# Make additions to subproject
echo "foo" > foo
git add foo
git commit -m "added foo"
# Get changes back into fork of upstream to contribute back
git checkout master
git subtree merge --prefix=script --squash split-script
# Results in: `Can't squash-merge: 'script' was never added.`
git subtree merge --prefix=script split-script
# Results in: fatal: `refusing to merge unrelated histories`
# retrying with --rejoin
git subtree split --rejoin --prefix=script -b split-script-rejoin
git checkout split-script-rejoin
echo "foo" > foo
git add foo
git commit -m "added foo"
git checkout master
git subtree merge --prefix=script --squash split-script
# Succeeded,push up to fork to prepare PR
git remote set-url origin git@github.com:sgvandijk/training-manual.git
git push origin master
所以现在我可以创建一个 PR,但是与上游相比,所有来自拆分的新提交都显示为:https://github.com/githubtraining/training-manual/compare/master...sgvandijk:master。如果上游决定压制我的 PR,我认为这不会在他们的历史中结束,但它看起来并不好。我该如何正确执行此操作?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)