我有一个分支,有一些提交,我想以交互方式进行rebase。然而,在拉动和合并之后,现在有其他提交与我的交错,所以我不能只做像git rebase -i HEAD~3
在选择单个提交时是否可以进行交互式rebase?像git rebase -i 23duirs 3eujsfe ...
另一种可能性 - 如果我只是运行git rebase -i
我相信可以将我的提交行剪切并粘贴为连续,并从那里压缩,这是正确的吗?是否有这样做的最佳做法,以尽量减少与那里不相关的提交冲突的可能性?
答案 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樱桃压缩的提交。
您完成了。