如何挑选合并提交?
How to cherry-pick merge commits?
我需要挑选一系列提交,我在其中找到了这样的提交:
Merge "TICKET-100: Some commit message" into master
< some other commits >
TICKET-100: Some commit message
我检查了内容,两次提交都一样。我可以只挑选第一个,而忽略以“Merge”开头的那个吗?它们有什么关系?
让我们假设你有这样的东西:
X - master
|
|
M
|\
| \
X B - merged_feature_branch
| |
| |
X A X - cherry_pick_destination
| / |
|/ |
X X
| /
| /
现在你有两个选择:
- 仅限樱桃采摘
A
和 B
- cherry pick
M
对阵第一个 parent (-m 1
)
两种解决方案都会引入相同的变化,但恕我直言,第一种方法更具可读性。
如果在提交 M
时解决了一些冲突,那么第二个选项可能是首选..
如果你必须cherry-pick一系列没有合并提交的提交,而不是
git cherry-pick A..B
您可以将范围放入抑制合并提交的子命令中:
git cherry-pick $(git rev-list --no-merges A..B)
也许你可以在合并之前重新设置你的提交?
尝试这样的事情:
git rebase -i HEAD~[commits count]
现在您必须看到一个包含所选提交的列表。在您想要压缩所有其他提交的第一次提交之前,必须是命令 pick
.
squash
- 如果你想更改提交消息,fixup
- 如果不想。
变基后你可能只能合并选定的更改。
我需要挑选一系列提交,我在其中找到了这样的提交:
Merge "TICKET-100: Some commit message" into master
< some other commits >
TICKET-100: Some commit message
我检查了内容,两次提交都一样。我可以只挑选第一个,而忽略以“Merge”开头的那个吗?它们有什么关系?
让我们假设你有这样的东西:
X - master
|
|
M
|\
| \
X B - merged_feature_branch
| |
| |
X A X - cherry_pick_destination
| / |
|/ |
X X
| /
| /
现在你有两个选择:
- 仅限樱桃采摘
A
和B
- cherry pick
M
对阵第一个 parent (-m 1
)
两种解决方案都会引入相同的变化,但恕我直言,第一种方法更具可读性。
如果在提交 M
时解决了一些冲突,那么第二个选项可能是首选..
如果你必须cherry-pick一系列没有合并提交的提交,而不是
git cherry-pick A..B
您可以将范围放入抑制合并提交的子命令中:
git cherry-pick $(git rev-list --no-merges A..B)
也许你可以在合并之前重新设置你的提交? 尝试这样的事情:
git rebase -i HEAD~[commits count]
现在您必须看到一个包含所选提交的列表。在您想要压缩所有其他提交的第一次提交之前,必须是命令 pick
.
squash
- 如果你想更改提交消息,fixup
- 如果不想。
变基后你可能只能合并选定的更改。