Git rebase -i用于特定的提交



我有一个分支,有几个提交,我想交互式地重基。然而,在拉和合并之后,现在有其他提交与我的交叉,所以我不能只是做一些像git rebase -i HEAD~3

是否有可能在选择单独提交时进行交互式重基?比如git rebase -i 23duirs 3eujsfe ...

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

给定

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

如果你提交的确实与其他更改无关,这将工作得很好

在git中,合并后重新定位是一个痛苦的过程。

我通常试图避免这个问题,通过不合并别人的工作,但相反,我获取并重新base

git fetch upstream
git rebase upstream/master

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

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

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

更改旧提交的另一种选择是git filter-branch,但使用起来相当复杂。

小窍门

从原点创建一个新的本地分支(LOCAL_B)。选择从LOCAL_A到LOCAL_B的提交,并使用git rebase -i HEAD~3压缩它们。

现在,为了安全起见,对LOCAL_A进行备份。

删除LOCAL_A。从远程创建新的本地分支LOCAL_A。优先选择从LOCAL_B到LOCAL_A的压缩提交。

最新更新