Val*_*ion 23 git merge git-cherry-pick
背景资料:
由于现有系统的工作流程受到限制,我们需要建立一个有点非正统的git过程.
(patch) A-B---F
| |
(hotfix) C-D-E
|
(dev) 1-2-3-G
Run Code Online (Sandbox Code Playgroud)
在补丁分支上,有一些提交.这里的文件与dev上的文件类似但不完全相同(同步脚本按照许多文件中的设置顺序切换,使它们在功能上相同时显示为已更改).
此分支需要修复,以便创建并处理修补程序分支.然后,这个分支合并回补丁,到目前为止,非常好.
需要将相同的修补程序部署到dev分支,以使其与修补程序保持相对同步,但尝试合并修补程序分支会导致git尝试合并来自A和B的所有不相关和"未更改"的文件,而不是只有C,D和E.
题:
看起来,cherry-pick做了我们想要的只是从选择的提交中获得更改,但我真的想要一种方法来同时挑选给定分支中的所有提交,而不必每次都查找提交ID .
Cod*_*ard 37
看来,
cherry-pick
做什么,我们想在只获得了从选择提交更改条款,但我真的很喜欢的方式来摘樱桃在一个给定的分支一次全部提交,而不必每次查找提交IDS.
cherry-pick
git cherry-pick
允许您选择在任何分支中对任何其他分支进行的任何提交.在您的情况下,您可以简单地检查主分支,然后检查cherry-pick
您希望的任何分支的所有提交(cherry-pick
支持范围,以便您可以指定开始和结束提交,而不是列出所有提交).
这样,您可以控制提交在所需分支中的显示方式.
例如:
git cherry-pick ebe6942..905e279
Run Code Online (Sandbox Code Playgroud)
# Find the range of commits you wish to re-add to your branch.
# then use cherry-pick to add them back to the branch
git cherry-pick start..end
# If you wish to include the start commit as well add the ^
# This will result in a cherry-pick of the start commit included as well
git cherry-pick start^..end
Run Code Online (Sandbox Code Playgroud)
git log
# print out the latest commit (first one) of the given branch
git log --oneline | tail -1
Run Code Online (Sandbox Code Playgroud)
merge-base
使用该merge-base
命令查找分支从原始分支拆分的位置:
git merge-base A B
Run Code Online (Sandbox Code Playgroud)
Lin*_*nji 13
如果您想从分支 dev 中挑选所有提交。
尝试:
git 樱桃选择 ..dev
假设您知道希望从分支中选择的提交数量,您可以使用相对提交表示法。
git cherry-pick BRANCH_A~10^..BRANCH_A
这将~10
优先选择从 ( ) BRANCH_A 的 HEAD之前的 10 个提交开始的所有提交,包括起始提交 ( ^
),并将获取范围 ( ..
) 到 BRANCH_A 的 HEAD 的所有提交。
一个班轮将是:
git cherry-pick $(git merge-base master my/branch)..my/branch
Run Code Online (Sandbox Code Playgroud)
您还可以将其转换为 git 别名或 bash 函数。我更喜欢这样使用它,所以我只改变一个地方:
BRANCH=my/branch; git cherry-pick $(git merge-base master ${BRANCH})..${BRANCH}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22439 次 |
最近记录: |