如何复制的提交从一个分支,另一个?
-
21-09-2019 - |
题
我有两个分支从我的掌握:
- v2。1:(第2版)我已经工作了好几个月
- 鞋:我创建了昨天添加一个特定功能要我的掌握(生产)
有没有一种方法来复制昨天的承诺,从鞋v2。1?
解决方案
你真的应该有一个工作流程,让你做的这一切,通过合并:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
所以你要做的就是 git checkout v2.1
和 git merge 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
移动鞋上直接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
注:原因,它需要一些额外的工作,为了做到这一点的是,它的建立重复的承诺,在你的存储库。这是不是一个真正的好事-整点便分支和合并是能够做的一切,通过使提交(s)一个地方,并将其合并到,无论他们是需要的。重复的承诺意味着,意图从来没有对合并这两个分支(如果你决定要以后,你会得到冲突)。
其他提示
使用
git cherry-pick <commit>
申请 <commit>
你的 目前的分支.
我自己可能会交叉检查提交我挑中 gitk
和cherry-pick他们有权击犯的条目的有替代。
如果你想去更加自动化(与所有其危险)并且假定,所有提交自从昨天发生的上鞋你可能产生的列表的承诺使用 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.
git cherry-pick
:应用的变化引入的一些现有的承诺
假设我们有分支 一个 与(X、Y、Z)提交。我们需要添加这些承诺支 B.我们要用的 cherry-pick
操作。
当我们使用 cherry-pick
, ,我们应当添加提交的树枝上 B 在同一时间顺序,即提交中出现的分支 一个.
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
与 选项
-电子或--编辑 :与此选项,git cherry-pick会让你编辑所提交信息之前犯。
-n-没有-提交 :通常命令将自动创建一个序列的提交。这标志应用的变化,需要cherry-pick每名提交给你的工作树和索引,没有作出任何承诺。此外,当这种选择是使用你的指数没有匹配的头提交。Cherry-pick样做是对的开始状态的指标。
这里一个有趣的 文章 关于 cherry-pick
.
或如果你是个小小的福音传教士的方面,你可以做一个小丑我使用。在deploy_template有提交我想要复制在我的主人为的分支部署
git branch deploy deploy_template
git checkout deploy
git rebase master
这将创造新的分支部署(I使用-f,以复盖现有部署的分支)在deploy_template,然后重订这个新的分支到主,而使deploy_template不变。
为简单情况下的只是复制的最后一次提交的来自支的鞋v2。1,你可以简单地抓住提交id(git log --oneline | head -n 1
)和做:
git checkout v2.1
git merge <commit>