git rebase -i用于特定提交?

时间:2015-09-16 16:37:30

标签: git git-rebase

我有一个分支,有一些提交,我想以交互方式进行rebase。然而,在拉动和合并之后,现在有其他提交与我的交错,所以我不能只做像git rebase -i HEAD~3

这样的事情。

在选择单个提交时是否可以进行交互式rebase?像git rebase -i 23duirs 3eujsfe ...

这样的东西

另一种可能性 - 如果我只是运行git rebase -i我相信可以将我的提交行剪切并粘贴为连续,并从那里压缩,这是正确的吗?是否有这样做的最佳做法,以尽量减少与那里不相关的提交冲突的可能性?

3 个答案:

答案 0 :(得分:5)

鉴于此

pick <unrelated a>
pick A
pick <unrelated b>
pick B
pick <unrelated c>

你绝对可以做到

pick <unrelated a>
pick <unrelated b>
pick <unrelated c>
pick A
squash B

如果您的提交真的与其他更改无关,则可以正常使用。

答案 1 :(得分:3)

合并后重新定位是git的痛苦。

我一般都试图通过不合并他人的工作来避免这个问题,而是取而代之的是

git fetch upstream
git rebase upstream/master

(您也可以使用git pull --rebase upstream master,但这有一个缺点,就是不更新remotes/upstream/master跟踪分支,而git fetch会这样做;因此我更喜欢fetch && rebase而不是pull --rebase {1}})。

这样,我的提交总是在master中的所有内容之上,直到我的开发准备就绪,然后我打开一个带有干净历史的pull请求而没有合并 即在任何时间点,最后n在我正在处理的分支中提交,是我的提交,我可以很容易地改写,压缩它们等。

修改一些旧提交的最简单方法是git rebase -i,而传递给git rebase -i的参数是一个提交单; 所提交的所有提交比提供的提交将显示在交互式rebase屏幕中。我不知道这个屏幕有什么办法只显示比参数更新的一些提交。

更改旧提交的替代方法是git filter-branch,但使用起来要复杂得多。

答案 2 :(得分:0)

小巧的解决方案。

从起点创建一个新的本地分支(LOCAL_B)。将您的提交从LOCAL_A挑选到LOCAL_B,然后使用git rebase -i HEAD~3压缩它们。

现在,为了安全起见,请备份LOCAL_A。

删除LOCAL_A。从远程创建新的本地分支LOCAL_A。从LOCAL_B到LOCAL_A樱桃压缩的提交。

您完成了。