Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用git合并具有公共父目录(但不同的SHA1)的两个目录_Git_Merge_Git Merge - Fatal编程技术网

使用git合并具有公共父目录(但不同的SHA1)的两个目录

使用git合并具有公共父目录(但不同的SHA1)的两个目录,git,merge,git-merge,Git,Merge,Git Merge,在我们的项目中,有人复制了代码。他们在自己的目录中创建了一个新的git存储库,并在那里继续工作。与此同时,我们的主要项目存储库的工作也在继续。我们现在只剩下两个没有通用SHA1的git存储库 A --- B --- C --- D | | Copy of code to new directory | E --- F --- G B和E是完全相同的文件、文件夹等 我们的目标是使用Git将F和G的更改合并到主分支中(当前位于D)假设您现在在回购中,

在我们的项目中,有人复制了代码。他们在自己的目录中创建了一个新的git存储库,并在那里继续工作。与此同时,我们的主要项目存储库的工作也在继续。我们现在只剩下两个没有通用SHA1的git存储库

A --- B --- C --- D
      |
      | Copy of code to new directory
      |
      E --- F --- G
B和E是完全相同的文件、文件夹等


我们的目标是使用Git将F和G的更改合并到主分支中(当前位于D)

假设您现在在回购中,包括
A--B--C--D

您需要首先使用命令将另一个repo添加到此repo中

$git remote add another_repo <git repo path>
$git fetch another_repo

首先,我要重新绘制你的图表

A --- B --- C --- D master E --- F --- G copy 然后运行
git filter branch
,使其永久化

git filter-branch --tag-name-filter cat -- --all
这将创建一个新的历史,“正确”的历史:

如果现在合并会发生什么? 我希望自动解决合并冲突

$ git merge copy/master Auto-merging test.txt CONFLICT (add/add): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. $git合并副本/主副本 自动合并测试.txt 冲突(添加/添加):在test.txt中合并冲突 自动合并失败;修复冲突,然后提交结果。 起作用的嫁接 $echo 3aa6b69127d20ac42746c39be3c273a9d80fb706\ 95b0fc836dbea7eaa0d043390df841d184af7cd5>.git/info/grafts $git筛选器分支--标记名筛选器类别--all 重写为0E7AF9374E4C57CB87F3FD5B2FB6A3F431B(7/7) 警告:Ref“Ref/heads/master”未更改 Ref“refs/remotes/copy/master”已重写 警告:Ref“refs/remotes/master/master”未更改 $git合并副本/主副本 自动合并测试.txt 通过“递归”策略进行合并。 test.txt|5+++++ 1个文件已更改,5个插入(+) 最终结果 $git log--图形--单线| cat *4dadb0a合并远程跟踪分支“副本/主副本” |\ |*bb2fc85克 |*be88bc5 F |*0816baf E *| 1532332 D *| 903C0 C |/ *95b0fc8 B *e9de90c提交一个
等待这不会导致大量的合并冲突吗?如果发生冲突,这将导致大量更改的文件,但不会比正常合并产生更多的冲突。但是应该会有冲突。。。因为他们没有共同点history@DietrichEpp:大多数将通过git自动合并,因为大多数文件的内容都是相同的。我尝试将其作为一个实验,在两个repo中涉及的每个文件中都会出现合并冲突。太好了,这生成了一个漂亮的日志。和+1表示您的解决方案。
git filter-branch --tag-name-filter cat -- --all
A --- B --- C --- D master \ E --- F --- G copy $ git init $ git remote add master ../gittest $ git remote add copy ../gittest2 $ git fetch master remote: Counting objects: 12, done. remote: Compressing objects: 100% (7/7), done. remote: Total 12 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (12/12), done. From ../gittest * [new branch] master -> master/master $ git checkout -b master master/master Branch master set up to track remote branch master from master. Already on 'master' $ git fetch copy warning: no common commits remote: Counting objects: 9, done. remote: Compressing objects: 100% (6/6), done. remote: Total 9 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. From ../gittest2 * [new branch] master -> copy/master $ git log --format=oneline copy/master | tail -n 1 3aa6b69127d20ac42746c39be3c273a9d80fb706 E $ git log --format=oneline master/master 1532332fe705931babe9db04c8d84051867b52c9 D 90903c0ac8dc26649b875ee00ea39bfd7571b1fb C 95b0fc836dbea7eaa0d043390df841d184af7cd5 B e9de90c82a32041cff3a19f8e40d4358bc4ec2ca Commit A $ git log --format=oneline master/master bec0e7af9374e4c57cb87f3fd5b2fb2b6a3f431b G a61e01d096e81c36bcc450afd98ca94cff909622 F 3aa6b69127d20ac42746c39be3c273a9d80fb706 E $ git merge copy/master Auto-merging test.txt CONFLICT (add/add): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. $ echo 3aa6b69127d20ac42746c39be3c273a9d80fb706 \ 95b0fc836dbea7eaa0d043390df841d184af7cd5 > .git/info/grafts $ git filter-branch --tag-name-filter cat -- --all Rewrite bec0e7af9374e4c57cb87f3fd5b2fb2b6a3f431b (7/7) WARNING: Ref 'refs/heads/master' is unchanged Ref 'refs/remotes/copy/master' was rewritten WARNING: Ref 'refs/remotes/master/master' is unchanged $ git merge copy/master Auto-merging test.txt Merge made by the 'recursive' strategy. test.txt | 5 +++++ 1 file changed, 5 insertions(+) $ git log --graph --oneline | cat * 4dadb0a Merge remote-tracking branch 'copy/master' |\ | * bb2fc85 G | * be88bc5 F | * 0816baf E * | 1532332 D * | 90903c0 C |/ * 95b0fc8 B * e9de90c Commit A