merging/other 交错提交后的交互式变基

Interactive rebase after merging/other commits interleaving mine

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

然后我在 github 上打开一个拉取请求,当它被接受时,我将删除该分支。我想更多地交互变基,但是当我这样做时,我会遇到合并提交和其他人的提交与我自己的交错。我不确定 how/if 我可以压缩这些提交还是 group/squash 我一个人?

例如,我的 git 分支日志在变基时可能如下所示:

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

在进行交互式变基以及压缩和重新排序提交时,我无法确定什么是可能的,什么不是。鉴于上述工作流程,您会推荐什么?

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

> git fetch upstream master
> git rebase upstream/master

我不确定 how/if 我可以压缩这些提交还是 group/squash 我一个人?

只压缩你的提交而不压缩其他的!!

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

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

I suggest squash only your commits (all of them if you want to).

例如,如果您有 3 个提交,您可以将它们压缩并使用交互式变基合并为一个。请参阅以下命令:

$ 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 (someone else) commits

这是大家在使用git时都会遇到的共同问题。想象一下,您正在处理本地回购。工作了一段时间后,你做了一些提交,现在你想把它们推送到原来的远程仓库。太棒了,你做了这个 git pushmerge commit 问题。

你知道其他人可能也提交了现在更新的同一个远程仓库。由于您的本地存储库未更新到远程存储库,因此有 merge commit problem。 现在,如果我们解决这个问题呢?我们可以将本地机器的存储库更新为您原来的远程存储库吗?可能吗?

Yes, it is possible, you can do it by rebasing. How?

当你这样做时:

git pull --rebase

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

查看此blog post了解更多详情

If you want to merge your branch to master?

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