Git子树壁球合并无需重新加入

问题描述

我从第三方存储库中提取一个子树,对其进行了一些更改,现在想将这些贡献回上游。我想以这样的方式压缩我的更改,以免将噪声从我的子树设置推送到它们。

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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...