Git:更新到特定版本

5
我8个月前检查了一个项目副本,并进行了许多更改。现在,我想获取过去8个月的所有新更改。更改的数量是巨大的(成千上万的提交)。我想做的是每次获取1个月的更改,与我的版本合并,然后测试。如果我拉取最新版本,更改/冲突的数量是庞大的。
所以...我想做什么很清楚,但我不知道如何使用GIT(我更熟悉svn)。我在Windows上使用TortoiseGit。我将所有本地更改提交到本地分支,那么我需要做什么才能拉取自我检出以来所做的更改,但不是所有更改?
谢谢
2个回答

6
一个“pull”就是一个“fetch”和一个“merge”的组合。所以先进行“fetch”,将所有远程变更下载到本地版本库,然后使用“git log master..origin/master”获取自从你的分支分叉以来在“origin”上进行的所有提交列表,然后选择大约一个月前的任何SHA1,并使用“git merge SHA1”将其拉入你的“master”分支。反复进行上述步骤。
如果你的变更较少,可能更容易执行“git checkout -b upstream origin/master”、“git log upstream..master”,并逐月合并你的变更。
我不知道分开处理是否会在长期内减少工作量。如果你一次性合并所有内容,你实际上不是合并了10,000个提交,而是合并了分支的“tips”,这意味着所有这些提交基本上都被压缩成了一个大提交。

+1 表示“我不知道分开是否会减少工作量”。 - manojlds
我同意做额外的工作,但是当我rebase到最新版本时,冲突太多,我很快就会迷失方向,并不得不从头开始。分步进行没有那么痛苦 :) 我会在明天看看是否所有都正确。 - Pavel P
这不应该发生。在第一次合并时,你是否在解决冲突后添加并提交了所有文件?你正在使用哪些SHA1值,是你的还是他们的?当你进行合并时,检出的是哪个分支? - Karl Bielefeldt
为了澄清,8个月前有一个文件夹/file.c。我对其进行了修改,当我尝试合并1个月的更改时,我解决了该文件中的冲突。当我合并到第二个月时,由于我已经对该文件进行了大部分更改,所以出现了冲突。简而言之,这些冲突是因为我们有相同的更改。当我检查那个文件夹/file.c中的更改时,我发现第一和第二个月之间的所有更改都是微不足道的,绝对必须在没有冲突的情况下合并,但由于它使用古老的基础文件作为基础,Tortoise Git再次显示了冲突。 - Pavel P
你用哪些分支来做这个?只有 masterorigin/master 吗? - Karl Bielefeldt
显示剩余4条评论

2

您可以每次合并一些提交记录。只需回顾一下并说月份1是345bbdkj....,git merge 345bbdkj(只需足够标识提交记录的哈希值)。您可以继续这样做,直到出现冲突。

此外,您可以重新基于其他更改创建您的仓库,而不是反向操作。无论您在这里做什么,您的更改都会变得混乱:( 处理10k+提交可能有点困难。


无法使用重复的合并策略。我已经合并了第一个月的更新,并解决了所有冲突。现在当我尝试合并第二个月的更改时,我再次看到相同的冲突。 - Pavel P

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