整理Git混乱的情况

9
我刚继承了一个使用Git进行维护的项目。在某个时候,代码被部署到3个不同的系统上,并且每个系统都维护着自己独立的Git仓库。
这3个系统中的每一个都沿着3个不同的方向扩展了原始基础系统。这3个系统中没有一个与另外两个同步过。一些更改位于主分支上,其他更改位于新分支上。
我应该如何将这3个不同的源码合并起来,以便我可以:
1.找到一个共同的基础进行工作;
2.找出哪些更改是需要在这3个系统上应用的错误修复;以及
3.以合理的方式维护这3个系统,使得只有一个公共分支,并分离出这3个不同系统所需的自定义内容?
2个回答

13

我会先将所有的代码仓库推送到一个中央仓库的不同分支上,这样我就可以轻松地在分支之间进行变基、合并等操作。

git-age, gitnub, gitx, giggle 这样的好的可视化工具非常有用,但如果你找不到分支点的话,你的任务可能会相当繁琐。如果所有分支都应用了类似的补丁,那么你可以使用(交互式)rebase重新排序提交,使它们处于相同的顺序。然后你就可以开始“压缩”你的分支,通过将提交放入主分支来向上移动分支点。有关如何使用 rebase 重新排序提交的详细说明,请参见此处

你需要采取的行动很可能已经在Git Howto Index提供的链接中描述了。拥有一个好的速查表也是很有用的。此外,我怀疑 Eric Sink 的文章《DVCS and DAGs, Part 1》的后续内容也会包含一些有用的信息(实际上没有,但阅读起来还是很有趣的)。

其他有用的链接包括:Git MagicGit ReadySourceMage Git Guide

我希望所有仓库都有良好的提交信息,以告诉你每个补丁的目的,否则就要进行代码审查 :)

至于如何维护定制内容,我们尝试了以下方法,并且两种方法都很有效:

  1. 所有部署都有自己的存储库来保存定制内容。
  2. 所有部署都在“自定义”存储库中拥有自己的分支。

第一次部署后,看到第二次即将到来,我们花了一些时间尝试预见未来的定制/裁剪点,以减少在定制的存储库(备选方案1,这是我们当前使用的方法)和基本/核心存储库之间的重复。

是的,我们确实会尽可能地重构,每当我们察觉到核心/定制分离滑动时:)


1
谢谢你的帮助。我对 Git 还比较陌生,所以对我来说可能比其他习惯使用它的人更具挑战性。 - Charles Darke
嘿,我有借口倒垃圾链接 :) 虽然如果你的问题更具体,未来你可能会得到更多和更好的答案。 - Henrik Gustafsson
哦,如果你发现某个答案有帮助的话,接受它是一种很好的礼貌行为(不用急,等一会儿…)。如果更好的答案出现了,您随时可以改变主意。 - Henrik Gustafsson
谢谢。您如何在不自动合并的情况下将其推送到不同的分支中? - Charles Darke
搞定了。在每个独立的系统中创建了新分支,然后从新的中央位置进行了git获取。 - Charles Darke

4

好的。经过一番努力,我终于做到了。对于其他人来说,如果要进行类似的任务,需要大量使用以下命令:

git rebase

当事情出了问题时,需要使用以下命令:

git reflog

然后使用以下命令:

git reset --hard HEAD@{ref}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接