比较分支,同时在提交之前忽略任何更改

时间:2018-04-20 11:34:16

标签: android git android-studio

我正在使用Android Studio并与多个分支机构合作。

其中两个分支在相同的核心代码上开发不同的东西(有点像具有共同核心功能的聊天应用程序,但UI,活动,碎片完全不同)。

其中一个分支实现必须应用于其他分支的修复,但是,因为每个分支都有多个不打算合并的提交,当比较分支或合并更改时,它会破坏目标分支,因为所有与修复程序无关的文件将被更改。

如何告诉Android Studio在某次提交之前忽略所有提交或"同步"两个分支都达到某个提交,这样当合并更改时,它只会使用从那一点开始的提交,而不是后面的一切?

编辑:这不是git - skipping specific commits when merging的重复,这个问题询问如何使用Android Studio,而不是终端命令。

4 个答案:

答案 0 :(得分:2)

从其他答案的评论来看,您似乎只想使用IDE命令来执行此操作。这可能意味着没有解决方案。 IDE集成通常提供最常见的操作;你想做的不是一个常见的操作,因为(正如蒂姆在答案中所说的那样)摆脱这种情况的最好办法就是不要进入它。

不同解决方案之间的主要区别在于您希望最终提交图表的外观。假设你从

开始
O -- o -- X -- X -- B1 -- B2 -- B3 <--(branch1)
      \
       X -- X -- A <--(branch2)

其他人提出的cherry-pick解决方案对于这种情况并不是坏事。虽然可能没有IDE支持,但它相对简单。它离开了你

O -- o -- X -- X -- B1 -- B2 -- B3 <--(branch1)
      \
       X -- X -- A -- B1' -- B2' -- B3' <--(branch2)

现在,这些分支之间的merge可能会在重复的补丁上跳闸,但是您指出这些分支不是您完全合并的分支。 (这提出了一个不同的问题,关于“分享回购”的分支是否是存储这两件事的最明智的方式,因为它们不是同一事物的替代版本。我假设你这样做是为了促进共享代码,但有专门设计的工具来解决这个问题,如果你使用它们,很明显如何共享错误修正公共代码。我离题了,现在我们可以回到处理你今天的情况。 ..)

另一个允许您保留这些“两个地方相同的更改”的知识的替代方法是将错误修正从branch1重新定义,然后将其合并到branch1和{{1}中}}。这涉及重写branch2历史记录,如果您已经共享branch1(即已将branch1提交推送到共享存储库),则可能不适合您。但是,如果你这样做,它看起来像

Bn

请注意,我假设错误修正提交位于分支的末尾;如果不是这个过程有点困难(重置和随后的rebase将被交互式rebase替换)。即使它们是,但git checkout branch1 git branch common git reset --hard HEAD~3 git rebase --onto `git merge-base branch1 branch2` branch1 common git checkout branch1 git merge common git checkout branch2 git merge common 命令的确切参数取决于要移动的提交数量。这会给你

reset

优点是您现在拥有 X -------- x ------- M1 <--(branch1) / / O -- o -- B1' -- B2' -- B3' <--(common) \ \ X ----- X ---- A ---- M2 <--(branch2) 分支,这是对共享代码进行进一步更改的地方(然后再次合并到commonbranch1)。< / p>

但是,如果错误修正提交已经被推送到branch2上的远程,那么branch1现在必须被“强制推送”,并且这会创建一个“上游rebase”条件其他人共享遥控器;因此,如果您不确定您的案例是否可以接受,请参阅branch1文档以获取有关该情况的信息。

还有其他选项,但这些选项涵盖了您可能希望提交图最终结束的最明智的选项。

答案 1 :(得分:0)

我认为最好的答案是提出一个工作流程,这样就不会/不会发生这个问题。假设它确实发生了,一种选择是在给定分支中进行错误修复,然后挑选修复提交到其他功能分支。假设特征分支永远不会与您描述的每个分支合并,那么唯一的问题可能是当特征分支合并回master时。然后,相同的错误修复将来自多个来源,这可能会或可能不会引起混淆。

答案 2 :(得分:0)

您可以使用git cherry pick从其他分支机构应用更改

请参考以下链接使用git cherry pick:

https://git-scm.com/docs/git-cherry-pick

如果您想提交提交,请使用git log

答案 3 :(得分:-1)

enter image description here

请参阅此屏幕截图。也许你会得到答案