如何将一大块提交变基到另一个提交上?
How to rebase a chunk of commit onto another commit?
我在 Git 的 devel
分支中有一个非常糟糕的情况
* deadbeef 1 hour ago (devel)
|
* ... (a bunch of commits)
|
* d5fca6e 11 days ago
* 8ca4341 11 days ago Merge branch
|\
| * 844d521 11 days ago Merge Branch
| |\
| * | bdded77 11 days ago
* | | 514e1e3 11 days ago
* | | 61c8a0a 11 days ago
* | | 1a155e8 11 days ago
| |/
|/|
* | 19eeb57 11 days ago
* | 0f6e367 11 days ago
|/
* bb1ca0d 11 days ago
我想得到
* bdded77' 11 days ago
* 514e1e3' 11 days ago
* 61c8a0a' 11 days ago
* 1a155e8' 11 days ago
* 19eeb57' 11 days ago
* 0f6e367' 11 days ago
* bb1ca0d 11 days ago
我试图简单地 cherry-pick
提交以线性化更改:
git checkout bb1ca0d
git cherry-pick 0f6e367
git cherry-pick 19eeb57
git cherry-pick 1a155e8
git cherry-pick 61c8a0a
git cherry-pick 514e1e3
git cherry-pick bdded77
之后,我需要 rebase 其余部分。我试过的是
git cherry-pick d5fca6e..devel
我遇到了很多冲突,所以也许这个 cherry-pick 不能像这样工作。但是:git diff bdded77 HEAD
没有显示任何内容。
我该如何处理?
编辑
我发现我最后一次挑选的错误。我应该写:
git cherry-pick d5fca6e^..deadbeef
最初的问题仍然存在,是否有更好的解决方案?
解决方案很好,但是 cherry-pick
必须使用包含当前 HEAD
的第一个父项的提交范围。
* (c)
* (b)
* (a)
| * (a', HEAD)
|/
*
这里你应该写:
git cherry-pick b^..c
其中 b^
指的是 a
那么您的提交范围是:
a^..c === b, c
完成此操作后您将得到:
* (c)
* (b)
* (a)
| * (c', HEAD)
| * (b')
| * (a')
|/
*
我在 Git 的 devel
分支中有一个非常糟糕的情况
* deadbeef 1 hour ago (devel)
|
* ... (a bunch of commits)
|
* d5fca6e 11 days ago
* 8ca4341 11 days ago Merge branch
|\
| * 844d521 11 days ago Merge Branch
| |\
| * | bdded77 11 days ago
* | | 514e1e3 11 days ago
* | | 61c8a0a 11 days ago
* | | 1a155e8 11 days ago
| |/
|/|
* | 19eeb57 11 days ago
* | 0f6e367 11 days ago
|/
* bb1ca0d 11 days ago
我想得到
* bdded77' 11 days ago
* 514e1e3' 11 days ago
* 61c8a0a' 11 days ago
* 1a155e8' 11 days ago
* 19eeb57' 11 days ago
* 0f6e367' 11 days ago
* bb1ca0d 11 days ago
我试图简单地 cherry-pick
提交以线性化更改:
git checkout bb1ca0d
git cherry-pick 0f6e367
git cherry-pick 19eeb57
git cherry-pick 1a155e8
git cherry-pick 61c8a0a
git cherry-pick 514e1e3
git cherry-pick bdded77
之后,我需要 rebase 其余部分。我试过的是
git cherry-pick d5fca6e..devel
我遇到了很多冲突,所以也许这个 cherry-pick 不能像这样工作。但是:git diff bdded77 HEAD
没有显示任何内容。
我该如何处理?
编辑
我发现我最后一次挑选的错误。我应该写:
git cherry-pick d5fca6e^..deadbeef
最初的问题仍然存在,是否有更好的解决方案?
解决方案很好,但是 cherry-pick
必须使用包含当前 HEAD
的第一个父项的提交范围。
* (c)
* (b)
* (a)
| * (a', HEAD)
|/
*
这里你应该写:
git cherry-pick b^..c
其中 b^
指的是 a
那么您的提交范围是:
a^..c === b, c
完成此操作后您将得到:
* (c)
* (b)
* (a)
| * (c', HEAD)
| * (b')
| * (a')
|/
*