我希望能够这样做:
git cherry-pick --interactive hash-0..hash-n-1 # fantasy command
Run Code Online (Sandbox Code Playgroud)
并获得与交互式rebase相同的工作流程:出现一个编辑器缓冲区,其中包含:
pick hash-0
pick hash-1
pick hash-2
...
pick hash-n-1
Run Code Online (Sandbox Code Playgroud)
在哪里我可以删除任何不需要的提交,squash它们在一起,或edit在选择之间暂停以做一些手动修复(如commit --amend)和所有这些.
请注意pick交互式rebase 如何像tanalizing一样cherry-pick.
现在可以通过首先执行樱桃选择,然后执行交互式基数来完成上述操作,这是不方便的.那是:
$ git tag old-head # mark starting point for later rebase
$ git cherry-pick hash-0..hash-n-1 # get everything first
$ git rebase --interactive old-head # okay now rebase "in-branch" to fix it up
Run Code Online (Sandbox Code Playgroud)
这不仅因为这两个步骤而不方便,而且因为它可能需要解决提交中的冲突,您甚至不希望在rebase阶段将其丢弃.
Kaz*_*Kaz 27
好的,找到了一个不错的黑客.
rebase --interactive HEAD^在当前分支中启动一个简单的提交.你会得到类似的东西:
pick 1efd396b * Fixed a bug in frob function
Run Code Online (Sandbox Code Playgroud)
现在,只需粘贴您要选择的其他哈希值:
pick 1efd396b * Fixed a bug in frob function
pick f01934db * Awesome feature added
pick 6fd109c1 * Refactored the widgets layer
squash 3900fd77 * Refactored the widgets layer s'more
Run Code Online (Sandbox Code Playgroud)
保存并退出,然后:rebase骡子有义务地将你背上装载的附加物品按照命令将其合并到当前分支中.
你实际上可以做一个空的rebase:
git rebase --interactive HEAD
Run Code Online (Sandbox Code Playgroud)
你得到一个包含缓冲区
noop
Run Code Online (Sandbox Code Playgroud)
你不必删除它; 只需添加您的选择.
附录:为了产生拾取列出了该方法,用途git log --oneline --reverse from..to,然后修剪所需的输出和预先设置底垫的命令到每个行:pick,squash,...
小智 2
也许有更好的答案,但这可能对你有用
git cherry | awk '$0=$2' > cherry.txt
"$EDITOR" cherry.txt
git cherry-pick --stdin < cherry.txt
Run Code Online (Sandbox Code Playgroud)