Git - 更改 "origin commit" 分支
Git - Change "origin commit" of a branch
我很难找到一个 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",但只有 "F1" 在 master 上的提交。
换句话说,我希望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 checkout develop && git rebase origin/master"
develop 的结果应该是:
* 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
有没有办法简单地做到这一点?
这个问题反复出现,我搜索了另一种方法,而不是用多个 "cherry-pick" 一个提交一个提交...
我只使用 "master"、"F1" 搜索一种方法,但不知道这些分支之间和 F1 中的提交数量:/
我想我也许可以使用 "rebase onto" 但我不太明白如何...
非常感谢!
使用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
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
请注意,提交哈希将不同于您的 "result on develop" 列表(在每个版本中)。
我很难找到一个 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",但只有 "F1" 在 master 上的提交。
换句话说,我希望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 checkout develop && git rebase origin/master"
develop 的结果应该是:
* 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
有没有办法简单地做到这一点? 这个问题反复出现,我搜索了另一种方法,而不是用多个 "cherry-pick" 一个提交一个提交...
我只使用 "master"、"F1" 搜索一种方法,但不知道这些分支之间和 F1 中的提交数量:/
我想我也许可以使用 "rebase onto" 但我不太明白如何...
非常感谢!
使用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
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
请注意,提交哈希将不同于您的 "result on develop" 列表(在每个版本中)。