【发布时间】:2014-09-21 23:47:30
【问题描述】:
考虑以下情况。
有一个项目 X 有一些积极的上游开发。我们正在为我们自己的内部目的开发项目 X 的一个分支。由于我们没有对项目 X 的 Git 存储库的写入权限,因此我们在自己的服务器上创建了该 Git 存储库的克隆。在本地计算机上工作时,所有同事都使用该克隆存储库作为origin。
为了能够不断的将项目 X 的上游开发整合到我们的 fork 中,我们没有在我们的origin 服务器上碰master 分支。 (master 分支设置为跟踪项目 X 的 Git 存储库的 master 分支。)相反,我们在分支 my_master 上工作,我们在其中提交更改(并将它们推送到 origin 服务器) .在我们的origin 服务器上,我们可以定期将项目 X 的最新提交拉入master 分支。然后,我们可以切换到my_master 分支,并通过运行git merge master 将项目X 的最新开发合并到我们自己的fork 中。
很好。但是,现在在我们的 fork 上工作的同事不小心在 master 分支上进行了很多提交,而不是在 my_master 分支上进行,并将这些提交到 origin 服务器。他注意到自己的错误,在本地切换到 my_master 并将他的 master 分支合并到他的 my_master 分支中,以便这些更改存在于正确的分支上,并将其推送。
所以my_master 分支现在很好,但是master 分支包含一些不应该存在的补丁。当然,我们可以通过创建“还原提交”来还原这些更改,以还原错误做出的单个提交。然后,origin 服务器上的master 分支的状态将再次类似于项目 X 的 Git 存储库中的master 分支的状态。但是,它实际上包含一些还原提交。这意味着,下次我们在origin 服务器上更新master 分支,并尝试将上游更改合并到我们的my_master 分支中,恢复提交也将被应用,并且假定的新功能内置到my_master 分支将被撤消。这是正确的吗?
那么我们该怎么做呢?原则上,我们希望将origin 服务器上的master 分支重置为意外提交之前的提交。但我们无法创建恢复提交,因为这意味着下一次将master 合并到my_master 也会恢复my_master 分支上的更改。
【问题讨论】:
标签: git git-branch branching-and-merging git-revert