我正在开发一个开源项目,我想将我的更改贡献给它。我有两个环境,我想在其上工作。第一个是上游环境,另一个是我的生产环境。我目前的做法是保留两个独立的分支机构;一个功能分支包含我想要推回到上游的更改和一个本地配置分支,我需要更改我需要使软件适应我的生产配置。功能分支将有许多提交,但配置分支只有一个提交。
我的问题是如何在环境之间来回切换。我需要使用功能分支和本地配置分支进行开发,但是当我回到上游时,我不希望从本地配置分支进行提交。我也不想通过恢复来污染我上游的提交。
另一种提问方式是图形化。鉴于下面的图片,我想使用c1 + f1..fN处理代码,但是当我创建一个pull请求时,我不希望c1成为pull请求的一部分。我不希望c1 +恢复c1。
答案 0 :(得分:1)
我历史上通过简单地重写历史记录来处理这个问题,以便在我合并上游功能分支时删除配置提交。考虑一下:
S (starting point, whichever branch you're working off of)
S - A ('config' branch)
S - A - B - C - D - E ('feature' branch, based off 'config')
假设您小心没有任何更改与A
中所做的更改冲突,您可以运行:
git checkout feature
git rebase -i {upstream remote}/{upstream branch}
并从历史记录中删除A
,然后再合并上游的更改。
这会让你:
S - B' - C' - D' - E'
应该为上游存储库提供一个干净的拉取请求。
也就是说,不同的团队对历史重写有不同的容忍度。但是,如果你是独自工作,它的影响应该非常小。
答案 1 :(得分:1)
使用git(或任何VCS)解决此问题的方法并不是很好。
使用git的最佳解决方案是在推送之前删除提交,正如joshtkling在他的回答中解释的那样。
然而,有一些缺点:
简而言之,它会在简单的情况下起作用,但会变得很痛苦。
我的建议:尝试更改应用,以便您不需要“配置”提交。
根据需要改变可配置的内容,因此您无需更改代码。恕我直言,如果您需要更改代码(或上游提供的其他部分)以使软件适应您的环境,这是一个不好的迹象 - 所以您的更改也可能对其他人有所帮助。