我的主人有两个分支:
- v2.1:(版本2)我已经研究了几个月
- wss:我昨天创建的,旨在向我的母版添加一个特定功能(正在生产中)
有没有办法将昨天的提交内容从wss复制到v2.1?
我的主人有两个分支:
有没有办法将昨天的提交内容从wss复制到v2.1?
Answers:
您实际上应该有一个工作流,可以通过合并来完成全部工作:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
因此,您要做的就是git checkout v2.1
和git merge wss
。如果由于某种原因您确实无法执行此操作,并且无法使用git rebase将wss分支移至正确的位置,则从某个地方获取单个提交并将其应用于其他地方的命令是git cherry-pick。只需签出要应用它的分支,然后运行git cherry-pick <SHA of commit to cherry-pick>
。
重新设置基准的某些方法可以为您节省:
如果您的历史记录如下所示:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (v2-only) - x - x - x (wss)
您可以使用git rebase --onto v2 v2-only wss
将wss直接移动到v2:
- x - x - x (v2) - x - x - x (v2.1)
|\
| x - x - x (v2-only)
\
x - x - x (wss)
然后,您可以合并!如果你真的,真的,真的不能去的地步,你可以合并,你仍然可以使用底垫中来一次切实做好几个樱桃挑选:
# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase
注意:之所以需要做一些额外的工作,是因为它正在您的存储库中创建重复的提交。这确实不是一件好事-轻松进行分支和合并的全部目的是能够通过将提交放在一个地方并将其合并到需要的地方来完成所有工作。重复提交意味着永远不要合并这两个分支(如果您决定以后再合并,则会产生冲突)。
git-svn-id
引用,然后dcommit
再次执行。尽管我本可以省去挑剔的步骤,而仅使用一个变基。
采用
git cherry-pick <commit>
申请<commit>
您当前的分行。
我本人可能会交叉检查我选择的提交,gitk
然后右键单击那里的提交条目来挑选它们。
如果您想更加自动化(有所有危险)并假设自昨天以来所有提交都发生在wss上,则可以使用生成提交列表git log
(--pretty
由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 rebase
在我的答案中使用的方法会更可靠。特别是,使用这样的for循环,如果其中一个樱桃小问题失败了,它仍然会尝试完成所有其他问题。可以说,这是非常非常不好的。
git
答案是简单直接的解决方案,而不是通过git的复杂性来蜿蜒来证明答题者对它的了解程度。
git cherry-pick
:应用一些现有提交所引入的更改
假设我们有分支(A)的提交(X,Y,Z)。我们需要将这些提交加入到分支乙。我们将使用这些cherry-pick
操作。
当我们使用cherry-pick
,我们应该分支中加入提交乙在同一时间顺序将提交出现在分公司一个。
cherry-pick确实支持一定范围的提交,但是如果您在该范围内进行合并提交,它将变得非常复杂
git checkout B
git cherry-pick SHA-COMMIT-X
git cherry-pick SHA-COMMIT-Y
git cherry-pick SHA-COMMIT-Z
工作流程示例:
我们可以使用cherry-pick
与选择
-e或--edit:使用此选项,git cherry-pick将允许您在提交之前编辑提交消息。
-n或--no-commit:通常,该命令会自动创建一系列提交。此标志将必要的更改应用到选择每个命名提交的工作树和索引中,而不进行任何提交。另外,使用此选项时,索引不必与HEAD提交匹配。对索引的开始状态进行挑选。
这里有一个有趣的文章有关cherry-pick
。