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

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

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


当前回答

这是另一种方法。

git checkout {SOURCE_BRANCH}               # switch to Source branch.
git checkout {COMMIT_HASH}                 # go back to the desired commit.
git checkout -b {temp_branch}              # create a new temporary branch from {COMMIT_HASH} snapshot.
git checkout {TARGET_BRANCH}               # switch to Target branch.
git merge {temp_branch}                    # merge code to your Target branch.
git branch -d {temp_branch}                # delete the temp branch.

其他回答

假设我已经向主分支提交了更改。 现在我将获得提交的提交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

您可以从想要复制的提交中创建一个补丁,并将该补丁应用到目标分支。

使用内置的git gui来选择特定的提交会更安全:

例如:将一个提交从dev分支复制到main分支:

git checkout main
gitk --all

然后右键单击所需的提交,并选择“樱桃选择此提交”

gitk for Mac:在Mac上安装gitk

上面已经提到的答案涵盖了大部分内容,但有一件事似乎被遗漏了,那就是选择的——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。但如果你觉得没有其他选择,你可以使用樱桃选择。

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

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

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