git cherry-pick 来自其他分支的提交列表
git cherry-pick list of commits from other branch
我经常发现自己将 alpha 分支的东西合并到主分支。我这样做的方式通常是在特定分支(尚未合并到主分支)上创建所有提交的列表。
git log origin/release/some_alpha_branch..feature/anotherbranch --pretty=format:%h --no-merges --reverse > commits.txt
这给了我一个提交列表,顺序相反,我可以在 notepad++ 中对其进行操作,以便用空格替换 \n。之后,我有一个由空格分隔的提交列表,我可以在我的 cherry pick 命令中复制粘贴
git cherry-pick --no-commit <pasted-list-of-space-separated-commits>
根据更改,我需要合并、提交、git cherry-pick --continue 和重复。
完成后,我重置所有提交以创建一个带有正确提交消息的提交
git reset --soft head~<number-of-commits-I-created>
至少可以说是可行的,但我想知道我是否以“错误的方式”做事。
是否有更好的方法以更少的操作实现类似的目标?
正如Code-Apprentice所说,你应该使用rebase -i
来省去你的麻烦:
因此,如果您想 cherry-picks 从 X~10 修改到 X(这两个修改都包含在您想要 cherry-pick 的内容中),您可以这样做:
git rebase -i --onto whatever-branch X~11 X # you want to include X~10 so you use X~11 in the rebase
然后享受编辑器的乐趣(四处移动修订,为每个修订指示不同的操作),保存,退出,然后看到变基运行它的魔力。您唯一需要注意的是对 start/end 的修订...因为如果 end 是一个分支,它将在 rebase 之后移动...所以你应该考虑始终使用修订 ID。此外,基本分支不会移动,因此您可能需要在完成后移动该指针。
我经常发现自己将 alpha 分支的东西合并到主分支。我这样做的方式通常是在特定分支(尚未合并到主分支)上创建所有提交的列表。
git log origin/release/some_alpha_branch..feature/anotherbranch --pretty=format:%h --no-merges --reverse > commits.txt
这给了我一个提交列表,顺序相反,我可以在 notepad++ 中对其进行操作,以便用空格替换 \n。之后,我有一个由空格分隔的提交列表,我可以在我的 cherry pick 命令中复制粘贴
git cherry-pick --no-commit <pasted-list-of-space-separated-commits>
根据更改,我需要合并、提交、git cherry-pick --continue 和重复。
完成后,我重置所有提交以创建一个带有正确提交消息的提交
git reset --soft head~<number-of-commits-I-created>
至少可以说是可行的,但我想知道我是否以“错误的方式”做事。
是否有更好的方法以更少的操作实现类似的目标?
正如Code-Apprentice所说,你应该使用rebase -i
来省去你的麻烦:
因此,如果您想 cherry-picks 从 X~10 修改到 X(这两个修改都包含在您想要 cherry-pick 的内容中),您可以这样做:
git rebase -i --onto whatever-branch X~11 X # you want to include X~10 so you use X~11 in the rebase
然后享受编辑器的乐趣(四处移动修订,为每个修订指示不同的操作),保存,退出,然后看到变基运行它的魔力。您唯一需要注意的是对 start/end 的修订...因为如果 end 是一个分支,它将在 rebase 之后移动...所以你应该考虑始终使用修订 ID。此外,基本分支不会移动,因此您可能需要在完成后移动该指针。