重新启动到具有合并提交的分支

时间:2014-05-27 08:24:27

标签: git version-control git-merge

我仍在尝试为我们的项目决定Git工作流程。它非常混乱,有点难以掌握。我可能遗漏了一些显而易见的事情,或者做错了。这里有一个经常发生的场景

方案

  • 从master创建功能分支(始终稳定
  • 对功能分支进行一些提交
  • master获取功能分支想要使用的新提交

目标

目标是让主人拥有漂亮而整洁的历史,而无需提交无用的评论,例如"修复"或" wip"。这些发生在那些正在沿着多台计算机移动的人身上,或者只是想从其他团队成员那里得到帮助。

旧路

我们过去一直在做git rebase origin/master。然而,必须遵循git pull --rebase,因此可以在没有--force的情况下将其推送到远程。这导致了一些破坏,特别是当该分支与其他人共享时。

新方式

现在我们正在尝试不同的方法并执行常规git merge origin/master,这会在功能分支上创建丑陋的合并提交,但它是最快且通常无痛的路径。然而,当功能分支完成后,梦魇再次开始。我们希望使用 rebase 将这些功能提交压缩到大约1-3次提交,具体取决于复杂性,特别是我们希望摆脱那些在中间发生的合并提交。

事情是,通常有很多冲突有时候很难解决,特别是当文件的更改被分成多个提交时。在历史中的某一点解决冲突通常会为下一次提交创建另一个冲突。很难记住该文件是如何查看该特定提交的。

所以我正在做git rebase -i --onto <feature-branch> -p origin/master。我不确定-p - preserve-merges )。使用它时,只会跳过最新合并提交之前的提交。我很难理解那里发生的事情和原因。没有-p它从分支的最开始就进行所有提交,甚至会发生更多冲突。

终极目标

基本上我想要实现的是对功能分支中所有这些提交的文件进行snapshop,然后从中进行一次新的提交。这可能是可以使用diff来制作补丁,然后在主服务器上应用该补丁。然而,所有的历史都在那里消失,如果我想看看谁和何时添加了这个改变,那么实际上是不可能找到的。

1 个答案:

答案 0 :(得分:2)

  

基本上我想要实现的是从功能分支中的所有提交中获取文件的快照,然后从中创建一个新提交

你可以这样做:

$ git checkout master
$ git merge --squash feature
$ git commit -m'squashed merge of feature'

但请注意,您丢失了功能分支和合并提交之间的父子关系。这意味着稍后在功能分支上做更多工作并重新合并是有问题的(因为git无法正确找到共同的祖先)。