将分支'X'合并为'Y',其中'X'已经具有'Y'的还原合并提交

时间:2017-10-03 15:06:34

标签: git

好吧,所以我们错误地将'Y'合并为'X'并推了推。由于这是一个错误,我们还原了那个提交。好的

现在我想将最新的更改从'X'合并到'Y',但是git显示了一堆文件被删除了不应该。它们在还原提交中从分支“X”中删除,但仍应存在于“Y”

2 个答案:

答案 0 :(得分:3)

恢复合并的结果几乎总是无意的:git有效地将其解释为意味着分支更改将永远不需要。问题是git看到了

O --- x --- x --- M --- W --- x --- x <--(master)
 \               /
  A ---- B ---- C --- D --- E <--(branch)

其中W“撤消”由master引入M的更改。如果您现在将branch合并到master,则合并基础为C;也就是说,git认为AC master已经在M O中进行了说明,因此它认为不需要返回revert合并基地。

因此,尽管W可能是最佳解决方案的原因有很多,但它可能需要一些额外的工作。

最简单的方法是在master上恢复branch,然后合并O --- x --- x --- M - W - x - x - M' - M2 <--(master) \ / / A ---- B ---- C ------- D -------- E <--(branch)

M'

我不喜欢的是,bisect处于破碎状态的可能性非常大,这可能会影响未来的漏洞(例如,如果您使用M')。有些人也认为它看起来“丑陋”,尽管我个人并没有过多关注这个问题。

看起来你似乎只想“挤压”M2A在一起,重现你认为你会得到的合并。这可能会在美学上令人愉悦,但它会产生一种“邪恶的合并” - 一种合并,其相对于其父母的补丁不是假定的。此外,它并不容易(尽管绝不是不可能)。

另一个实用的选择是创建一个或多个新提交,重新引入E通过git rebase -f O branch 最初引入的更改,基本上让git“忘记”更改被“占用”。

master

(请注意,您不能在此处使用O作为上游;您必须指定上游是提交 A' --- B' --- C' --- D' --- E' <--(branch) / O --- x --- x --- M --- W --- x --- x <--(master) \ / A ---- B ---- C ,可能是通过提供它的SHA ID。)

branch

从这里开始,master<!doctype html> <html> <head> <meta charset="utf-8"> <title>ISSUE</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css"> <link rel="stylesheet" href="http://cdn.datatables.net/1.10.1/css/jquery.dataTables.css"> <link rel="stylesheet" href="http://cdn.datatables.net/responsive/1.0.0/css/dataTables.responsive.css"> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> <script src="http://cdn.datatables.net/1.10.1/js/jquery.dataTables.min.js"></script> <script src="http://cdn.datatables.net/responsive/1.0.0/js/dataTables.responsive.js"></script> <!-- Latest compiled and minified CSS --> </head> <body> <table id="example" class="display" cellspacing="0" width="100%"> <thead> <tr> <th>Name</th> <th>Position</th> <th>Office</th> <th>Age</th> <th>Start date</th> <th>Salary</th> </tr> </thead> <tbody> <tr> <td>Tiger Nixon</td> <td>System Architect</td> <td>Edinburgh</td> <td>61</td> <td>2011/04/25</td> <td>$320,800</td> </tr> <tr> <td>Garrett Winters</td> <td>Accountant</td> <td>Tokyo</td> <td>63</td> <td>2011/07/25</td> <td>$170,750</td> </tr> </tbody> </table>table> </body> </html> <script> $(document).ready(function(){ $('#example').DataTable(); }); </script> 的简单合并将按预期工作。

答案 1 :(得分:2)

你应该恢复还原并将X合并到Y.现在如果你不想在X中恢复它可能是一个问题。在这种情况下,从X创建一个新的分支(比如Z),在Z上执行恢复并将Z合并为Y.