我从我主人那里得到了两个分支:
v2.1:(版本2)我已经做了几个月了 wss:我昨天创建了一个特定的功能添加到我的master(在生产中)
有没有办法将昨天的提交从wss复制到v2.1?
我从我主人那里得到了两个分支:
v2.1:(版本2)我已经做了几个月了 wss:我昨天创建了一个特定的功能添加到我的master(在生产中)
有没有办法将昨天的提交从wss复制到v2.1?
当前回答
使用内置的git gui来选择特定的提交会更安全:
例如:将一个提交从dev分支复制到main分支:
git checkout main
gitk --all
然后右键单击所需的提交,并选择“樱桃选择此提交”
gitk for Mac:在Mac上安装gitk
其他回答
cherry-pick命令可以从标准输入读取提交列表。
下面的命令选择用户John在“开发”分支中但不在“发布”分支中的提交,并按时间顺序执行。
git log develop --not release --format=%H --reverse --author John | git cherry-pick --stdin
对于从分支wss复制最后一次提交到v2.1的简单情况,你可以简单地获取提交id (git log——oneline | head -n 1),然后执行:
git checkout v2.1
git merge <commit>
这是另一种方法。
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.
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。
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提交匹配。根据索引的开始状态进行选择。
这里有一篇关于择偶的有趣文章。