Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 如何在保留一个分支的同时修复多个提交之前的合并冲突?_Git_Merge_Version Control_Tortoisegit_Merge Conflict Resolution - Fatal编程技术网

Git 如何在保留一个分支的同时修复多个提交之前的合并冲突?

Git 如何在保留一个分支的同时修复多个提交之前的合并冲突?,git,merge,version-control,tortoisegit,merge-conflict-resolution,Git,Merge,Version Control,Tortoisegit,Merge Conflict Resolution,在我所在的团队中,我们同意在中央存储库中只有一个分支-主分支。我们创建特征分支,但从不推动。一些开发人员忘记了在合并到master之前重新设置其功能分支的基础。所以Git中存在冲突,他们不需要费心解决。(他们只是用自己的来覆盖其他的更改。)其他一些提交会出现并位于这些冲突合并的顶部。这使得中央存储库具有多个分支 这里是一个简化的例子。它类似于龟甲中的内容。()中的名称是分支名称。因为这只是一个例子,我也推(那些特征分支的名称前面有“origin”) 那么,如何在只保留一个分支(主分支)的情况下解

在我所在的团队中,我们同意在中央存储库中只有一个分支-主分支。我们创建特征分支,但从不推动。一些开发人员忘记了在
合并
到master之前重新设置其功能分支的基础。所以Git中存在冲突,他们不需要费心解决。(他们只是用自己的来覆盖其他的更改。)其他一些提交会出现并位于这些冲突合并的顶部。这使得中央存储库具有多个分支

这里是一个简化的例子。它类似于龟甲中的内容。
()
中的名称是分支名称。因为这只是一个例子,我也推(那些特征分支的名称前面有“origin”)

那么,如何在只保留一个分支(主分支)的情况下解决合并冲突呢

*   (feature/feature04, master, origin/master, origin/feature/feature04) Commit in feature 04
|
*   Merge branch 'feature/feature03'
|\
| *   (feature/feature03, origin/feature/feature03) Commit in feature 03
* |   (feature/feature02, origin/feature/feature02) Commit in feature 02
|/
*   (feature/feature01, origin/feature/feature01) Commit in feature 01
|
*   Commit #1
同一图表的另一视图:

A -- B -- C ------ E -- F -- (other commits)   MASTER branch
      \------ D --/                            feature03 branch

为了使提交历史记录保持远程repo的线性,您应该在提交历史记录中将提交
E
替换为提交
D
(如下图所示)

首先,在提交
C
的顶部重新设置提交
D
的基础,并通过以下方式将提交
feature/feature03
指向重新设置基础的提交

git rebase --onto <commit id for C> <commit id for B> <commit id for D>
git branch -f feature/feature03
然后在提交
D'
顶部的
master
分支上重新设置其他提交的基础,并通过以下命令重新指向
master
分支

git rebase --onto <commit id for D'> <commit id for E> <commit id for X>
git branch -f master
git checkout master
最后通过以下命令强制将更改后的
master
分支提交历史推送到远程repo

git push -f origin master

注意:功能分支似乎已经推送到远程repo,因为您显示了跟踪分支,如
origin/feature/feature01
origin/feature/feature02
等。如果您想删除远程repo中的功能分支,可以使用
git push:feature/feature01
git-push:feature/feature02
等等。

你的问题不清楚,你说的保持合并冲突是什么意思合并后,冲突得到解决。
git rebase --onto <commit id for D'> <commit id for E> <commit id for X>
git branch -f master
git checkout master
A---B----C---D'---F'---…---X'  master
             |
      Feature/feature03
git push -f origin master