我从我主人那里得到了两个分支:

v2.1:(版本2)我已经做了几个月了 wss:我昨天创建了一个特定的功能添加到我的master(在生产中)

有没有办法将昨天的提交从wss复制到v2.1?


当前回答

或者如果你不太站在福音派这边你可以用我用的丑陋的方法。在deploy_template中,有一些提交需要作为分支部署复制到主节点上

git branch deploy deploy_template
git checkout deploy
git rebase master

这将在deploy_template上创建新的分支deploy(我使用-f来覆盖现有的deploy分支),然后将这个新分支重新基于master,不改变deploy_template。

其他回答

cherry-pick命令可以从标准输入读取提交列表。

下面的命令选择用户John在“开发”分支中但不在“发布”分支中的提交,并按时间顺序执行。

git log develop --not release --format=%H --reverse --author John | git cherry-pick --stdin

假设我已经向主分支提交了更改。 现在我将获得提交的提交id (xyz)。 然后我必须去到我需要推送提交的分支。

单次提交id xyz

git checkout branch-name
git cherry-pick xyz
git push origin branch-name

多个提交id xyz abc qwe

git checkout branch-name
git cherry-pick xyz abc qwe
git push origin branch-name

上面已经提到的答案涵盖了大部分内容,但有一件事似乎被遗漏了,那就是选择的——no-commit特性。

假设,您在特性分支上有多个提交,您希望将它们“合并”为一个提交,并将它们放在您的主分支上。在这种情况下,你需要做的是:

git checkout <branch-on-which-to-add-features>
git cherry-pick --no-commit <commit-hash>
git cherry-pick --no-commit <commit-hash>
.
.
.

最后,一旦你选择了所有需要的特性,你可以做最后的提交:

git commit -m "Some message for the merge commit"

理想情况下,就像@Cascabel提到的,你应该使用merge或rebase。但如果你觉得没有其他选择,你可以使用樱桃选择。

git精选:应用一些现有提交引入的更改

假设我们有(X, Y, Z)提交的分支A。我们需要将这些提交添加到分支b。我们将使用选择操作。

当我们使用cherry-pick时,我们应该按照提交出现在分支A中的时间顺序在分支B上添加提交。

Cherry-pick确实支持一定范围的提交,但如果在这个范围内有合并提交,就会变得非常复杂

git checkout B
git cherry-pick SHA-COMMIT-X
git cherry-pick SHA-COMMIT-Y
git cherry-pick SHA-COMMIT-Z

工作流示例:

我们可以有选择地选择

-e或——edit:使用这个选项,git会让你在提交之前编辑提交消息。

-n或——no-commit:通常该命令会自动创建一个提交序列。该标志应用必要的更改,将每个命名的提交选择到您的工作树和索引中,而不进行任何提交。此外,当使用此选项时,您的索引不必与HEAD提交匹配。根据索引的开始状态进行选择。

这里有一篇关于择偶的有趣文章。

Use

git cherry-pick <commit>

将<commit>应用到当前分支。

我自己可能会交叉检查我在gitk中选择的提交,然后用右键单击那里的提交条目来选择它们。


如果你想更加自动化(尽管有危险),并且假设所有的提交都发生在昨天的wss上,你可以使用git log生成提交列表(由Jefromi建议)

git log --reverse --since=yesterday --pretty=%H

所有东西都放在一起假设你使用bash

for commit in $(git log --reverse --since=yesterday --pretty=%H);
do
    git cherry-pick $commit
done

如果这里出了问题(有很多可能性),您就有麻烦了,因为这是在实时签出上工作的,所以要么手动挑选,要么像Jefromi建议的那样使用rebase。