Git 提交已在不同的分支上结束

Git 提交已在不同的分支上结束,git,Git,我有以下提交/分支结构: | * 03dd257 - (HEAD, solutions) ... |\ | * 7976266 - (master) ... * | 9ce9158 - ... |/ * d2a4d81 - ... 我的流程是: 提交d2a4d81(主控) 创建分支解决方案 提交9ce9158(解决方案) 提交7976266(主控) 将主机合并到解决方案(提交03dd257) 主机上的ammend提交7976266 现在我的提交在主控和解决方案上有所不同。如何安

我有以下提交/分支结构:

|
*   03dd257 - (HEAD, solutions) ...
|\  
| * 7976266 - (master) ...
* | 9ce9158 - ...
|/  
* d2a4d81 - ...
我的流程是:

  • 提交d2a4d81(主控)
  • 创建分支解决方案
  • 提交9ce9158(解决方案)
  • 提交7976266(主控)
  • 将主机合并到解决方案(提交03dd257)
  • 主机上的ammend提交7976266
现在我的提交在主控和解决方案上有所不同。如何安全地更新分支解决方案上的commit 7976266

这些都是局部变化,所以一旦我在局部解决了这个问题,就应该没有问题了


我对solutions branch做了进一步的更改,因此我不能简单地重置为9ce9158并再次合并。

如果您这样做,合并提交仍将指向旧的(未修改的)提交,并且您的树将如下所示:

|   *  XXXXXXX - amended commit
*   |  03dd257 - (HEAD, solutions) ...
|\  |
| * | 7976266 - (old master) ...
* |/ 9ce9158 - ...
|/  
* d2a4d81 - ...

您可能要做的是在合并之前将解决方案分支重置回,并执行新的合并。如果您还没有发布任何内容(而且由于您修改了内容,您可能没有发布),那么可以这样做。

假设通过修改
7976266
生成的新提交是
7976266-v2

我想您希望
7976266-v2
中的更改也出现在
solutions
中,而不会使图形过于复杂

首先,在
7976266-v2
创建一个
amend
分支:

git branch amend 7976266-v2
然后,在
7976266
7976266-v2
之间的“重基”更改为
解决方案

git rebase --onto solutions 7976266 amend
这将在
03dd257
之后创建一个新的提交,其中包含
7976266
7976266-v2
之间的更改,并由
amend
分支立即指向

  * sth_new - (amend)
|/
*   03dd257 - (solutions) ...
|\  
| * 7976266 - (master) ...
* | 9ce9158 - ...
|/  
* d2a4d81 - ...

现在,您可以在需要时将
amend
合并到
solutions
上。

如果您不关心提交内容,我认为简单的合并就可以了。这并不是我真正想要的,因为我在03dd257之后还有一些其他提交,不想丢失它们。事实上,我确实重置了,因为这只是一个小的提交,但对于未来来说,拥有更好的解决方案会很好。最后我没有使用它,我重置为9ce9158,并再次合并。然而,据我所知,你的答案部分解决了问题,因此我可以接受它,只要你更新分支的“图表”,就像aragaer的答案一样(如果我错了,请纠正我)。我相信这就是我们可以使用
回基
得到的结果。据我所知,它所做的是通过重放更改,找到2次提交(d2a4d81)的最新共同祖先,将路径跨度(7976266--d2a4d81--amend)复制到
解决方案
,并指向新内容的提示。