Git - 更改分支的“原始提交”

问题描述 投票:0回答:1

我很难找到一个 Git 通用工作流程来从分支中删除一些提交(在 2 个引用之间);这是一个小例子:

我现在的状态是这样的:

* a878646 (develop) C8a
* 070acb7 C7a
| * 7937ce7 (HEAD, F1) C9b
| * fb4add2 C8b
| * 30456de C7b
|/  
* 6a0999e C6
* 45ae978 C5
* e8a2eeb (tag: T3, master) C4
* 24b98b2 (tag: T2) C3
* c874fc7 (tag: T1) C2
* a853900 C1

我想在我的平台上测试“F1”,但仅限于 master 上的“F1”提交。

换句话说,我希望F1变成这样:

* 7937ce7 (HEAD, F1) C9b
* fb4add2 C8b
* 30456de C7b
* e8a2eeb (tag: T3, master) C4
* 24b98b2 (tag: T2) C3
* c874fc7 (tag: T1) C2
* a853900 C1

所以我必须删除提交 C5 和 C6。

测试后,F1应该合并到master上。

但是,这些提交必须保留在“develop”分支上,因为之后我必须执行“git checkoutdevelopment && git rebase origin/master”

开发的结果应该是:

* a878646 (HEAD, develop) C8a
* 070acb7 C7a
* 6a0999e C6
* 45ae978 C5
* 7937ce7 C9b (tag: T4, master)
* fb4add2 C8b
* 30456de C7b
* e8a2eeb (tag: T3) C4
* 24b98b2 (tag: T2) C3
* c874fc7 (tag: T1) C2
* a853900 C1

有没有办法简单地实现这一点? 这个问题经常出现,我寻找另一种方法,而不是用多个“樱桃挑选”一个提交一个提交......

我搜索一种仅使用“master”、“F1”的方法,并且不知道这些分支之间和 F1 中的提交数量:/

我想我也许可以使用“rebase into”,但我真的不明白如何......

非常感谢!

git workflow commit revert
1个回答
2
投票

使用
rebase --onto

git checkout F1
git rebase 6a0999e --onto master

git checkout F1
git rebase develop --onto master

使用
git rebase -i

git checkout F1
git rebase -i master
# Remove lines with C5 and C6 and save.

使用
git cherry-pick

git checkout master@{0} # checkout in detached HEAD mode
git cherry-pick 6a0999e..7937ce7  # note that 6a0999e commit will not be cherry-picked - this is the commit before split
git branch F1 HEAD -f  # move F1 ref to current commit

请注意,提交哈希值将与“开发结果”列表中的不同(在每个版本中)。

© www.soinside.com 2019 - 2024. All rights reserved.