合并后的交互式rebase /其他提交交错我的

时间:2015-09-28 15:04:14

标签: git github rebase

我的典型git工作流程是在我们的主分支上创建一个功能分支,进行小型提交,同时定期从主服务器进行合并以便跟上。

然后我在github上打开一个pull请求,当它被接受时我会删除分支。我想以交互方式更多地更改,但是当我这样做时,我会遇到合并提交和其他人的提交与我自己交错。我不确定如何/如果我可以压制那些提交或组合/挤压我的一个人?

例如,我的分支的git日志看起来可能是这样的时候进行rebase:

merge commit
someone else's commit
one of my commits
another one of my commits
another merge commit
another person's commit
one of my commits, the first one after branching

在进行交互式rebase,压缩和重新排序提交时,我遇到了什么是可能的,什么不可能。鉴于上述工作流程,您会推荐什么?

2 个答案:

答案 0 :(得分:4)

我们在办公室使用的流程是在合并拉取请求之前,重新绑定到master分支(或您希望合并到的任何分支)。这可以确保您的提交在当前master中的所有其他提交之上进行排序,从而消除了提交与其他提交的交错:

> git fetch upstream master
> git rebase upstream/master

答案 1 :(得分:3)

我不确定如何/如果我可以压制那些提交或组合/挤压我的?

只举行你的提交而不是其他提交!!

最近,我遇到了同样的问题,我的拉请求有41次提交,我的分支有合并冲突,我的拉取请求过时了。我不得不处理你现在面临的一些问题。我只会触及我所实施的内容。

one of my commits
another one of my commits
one of my commits, the first one after branching
  

我建议只压缩你的提交(如果你愿意的话,可以全部压缩)。

例如,如果您有3次提交,则可以使用交互式rebase将它们压缩并合并为一次。见下面的命令:

$ git rebase -i HEAD~n

例如,您想要压缩3个提交:

$ git rebase -i HEAD~3

现在,您将看到一个交互式rebase界面,您可以在第一次提交时编写reword / pick并在其余部分中进行压缩。请参阅此视频以便更好地理解。

Squashing commits

merge commit
someone else's commit
another merge commit
another person's commit 
  

Rebase to other(其他人)提交

这是使用git时每个人都面临的常见问题。想象一下,你正在研究当地的回购。工作了一段时间后,你做了一些提交,现在你想将它们推送到原始的远程存储库。很酷,你这样做了git push,说merge commit问题。

您知道其他人也可能已经承诺使用现在更新的同一个远程仓库。由于您的本地仓库未更新为远程仓库,因此merge commit problem。 现在如果我们清除这个问题呢?我们可以将本地机器的回购更新到您原来的远程回购吗?有可能吗?

  

是的,有可能,你可以通过变基来做到这一点。怎么样?

当你这样做时:

git pull --rebase

这里发生了什么? Git将回退(撤消)所有本地提交,下拉远程提交,然后在新拉动的远程提交之上重放本地提交。如果git无法处理任何冲突,您将有机会手动合并提交,然后只需运行git rebase --continue继续重播您的本地提交。

有关详细信息,请参阅此blog post

  

如果要将分支合并到master?

Best (and safest) way to merge a git branch into master