git rebase -i 用于特定提交?
git rebase -i for specific commits?
我有一个分支,其中包含一些我想交互变基的提交。但是,在拉取和合并之后,现在有其他提交与我的交错,所以我不能只做 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.
合并后变基很痛苦
我通常会尝试通过不合并其他人的工作来避免这个问题,而是获取和变基
git fetch upstream
git rebase upstream/master
(您也可以使用 git pull --rebase upstream master
,但这有一个缺点,即不会更新您的 remotes/upstream/master
跟踪分支,而 git fetch
会更新;因此我更喜欢 fetch && rebase
pull --rebase
).
这样,我的提交总是在 master 中的所有内容之上,直到我的开发准备就绪,然后我打开一个没有合并的干净历史的拉取请求
IE。在任何时间点,我正在处理的分支中的最后 n 个提交是我的提交,我可以轻松地改写、压缩它们等
修改一些旧提交的最简单方法是 git rebase -i
,您传递给 git rebase -i
的参数是单个提交; 所有比提供的提交更新的提交将显示在交互式变基屏幕中。我不知道这个屏幕有什么方法可以只显示 some commits newer than the param.
更改旧提交的替代方法是 git filter-branch
,但使用起来要复杂得多。
有点老套的解决方案。
从原点创建一个新的本地分支(LOCAL_B)。 cherry-pick 从 LOCAL_A 到 LOCAL_B 的提交并使用 git rebase -i HEAD~3
.
压缩它们
现在,为安全起见备份LOCAL_A。
删除LOCAL_A。从远程创建新的本地分支 LOCAL_A。 Cherry-pick 从 LOCAL_B 到 LOCAL_A 的压缩提交。
大功告成。
我有一个分支,其中包含一些我想交互变基的提交。但是,在拉取和合并之后,现在有其他提交与我的交错,所以我不能只做 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.
合并后变基很痛苦我通常会尝试通过不合并其他人的工作来避免这个问题,而是获取和变基
git fetch upstream
git rebase upstream/master
(您也可以使用 git pull --rebase upstream master
,但这有一个缺点,即不会更新您的 remotes/upstream/master
跟踪分支,而 git fetch
会更新;因此我更喜欢 fetch && rebase
pull --rebase
).
这样,我的提交总是在 master 中的所有内容之上,直到我的开发准备就绪,然后我打开一个没有合并的干净历史的拉取请求 IE。在任何时间点,我正在处理的分支中的最后 n 个提交是我的提交,我可以轻松地改写、压缩它们等
修改一些旧提交的最简单方法是 git rebase -i
,您传递给 git rebase -i
的参数是单个提交; 所有比提供的提交更新的提交将显示在交互式变基屏幕中。我不知道这个屏幕有什么方法可以只显示 some commits newer than the param.
更改旧提交的替代方法是 git filter-branch
,但使用起来要复杂得多。
有点老套的解决方案。
从原点创建一个新的本地分支(LOCAL_B)。 cherry-pick 从 LOCAL_A 到 LOCAL_B 的提交并使用 git rebase -i HEAD~3
.
现在,为安全起见备份LOCAL_A。
删除LOCAL_A。从远程创建新的本地分支 LOCAL_A。 Cherry-pick 从 LOCAL_B 到 LOCAL_A 的压缩提交。
大功告成。