合并后进行交互式变基/插入其他提交到我的提交之间

15

我的典型git工作流程是从主分支上创建一个功能分支,进行小的提交,在此过程中周期性地与主分支合并以保持同步。

然后我会在github上打开一个pull request,等待它被接受后会删除该分支。虽然我希望能够更多地交互式地变基,但当我这样做时,我会遇到合并提交和其他人的提交与我的提交交错的情况。我不确定我是否可以压缩那些提交或仅组合/压缩我的提交?

例如,当需要变基时,我的分支的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

在进行交互式变基、压缩和重新排序提交时,我对可能和不可能的事情感到困惑。 鉴于上述工作流程,您有什么建议?


1
你使用 rebase 有什么原因吗? - ilj
@ilj 其他团队成员喜欢尽可能保持干净的历史记录,因此保持提交历史合理是很重要的。就我个人而言,我不介意有一个相当健谈的历史记录(不完全超出界限)。 - jkj2000
2个回答

6

我们办公室使用的流程是,在合并你的拉取请求之前,将代码库变基到主分支(或者你期望合并的任何分支)。这可以确保你的提交与 master 分支上当前所有其他提交按顺序排列,从而消除你的提交与其他人的交错:

> git fetch upstream master
> git rebase upstream/master

2
我明白了,谢谢。所以我会定期从主分支进行变基,而不是合并它。 - jkj2000

4
我不确定如何/是否可以压缩那些提交或仅组合/压缩我的提交?
仅压缩您自己的提交,不要压缩其他人的提交!!
最近,我遇到了同样的问题,我的拉取请求中有41个提交,我的分支发生了合并冲突,我的拉取请求已过期。我必须解决你现在面临的一些问题。我只会谈论我实施的内容。
one of my commits
another one of my commits
one of my commits, the first one after branching

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

例如,如果你有3个提交,你可以使用交互式变基将它们压缩成一个。请参见下面的命令:

$ git rebase -i HEAD~n

例如,您想压缩3个提交:
$ git rebase -i HEAD~3

现在,您可以看到一个交互式的变基界面,在这里您可以在第一个提交上编写“reword/pick”,并在其余提交上进行“squash”。请观看此视频以更好地理解。

合并提交

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

将提交的内容变基到其他(他人)的提交

当使用git时,这是每个人都会遇到的常见问题。想象一下,你正在本地repo上工作。工作一段时间后,你进行了一些提交,现在你想将它们推送到原始远程库。很好,你使用了git push,但出现了合并提交问题。

你知道其他人可能也已经向相同的远程repo进行了提交,而此时远程repo已经更新。由于你的本地repo没有更新到远程repo,因此出现了合并提交问题。 那么如果我们解决了这个问题呢?我们可以将本地机器的repo更新到原始的远程repo吗?这是可能的吗?

是的,这是可能的,你可以通过变基来实现。怎么做呢?

当你执行以下操作时:

git pull --rebase

Git会回滚(撤销)你所有的本地提交,拉取远程提交,然后在新拉取的远程提交之上重新播放你的本地提交。如果出现Git无法处理的冲突,你将有机会手动合并提交,然后简单地运行git rebase --continue继续重放你的本地提交。
请参阅此博客文章以获取更多详细信息。

如果你想将你的分支合并到主分支上?

将git分支合并到主分支的最佳(也是最安全)方法


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接