假设我们有两个分支:master和feature_branch。
是否有可能检查每个提交是否都经过feature_branch精心挑选master?
以下是我经常遇到的场景:
您在masteror上有一组提交design,我想将它们放在production分支之上。
我倾向于创建一个带有基础的新分支,作为productioncherry-pick这些提交并将其合并到production
然后,当我合并master到生产时,我会遇到合并冲突,因为即使更改是相同的,但由于樱桃选择而注册为不同的提交。
我找到了一些解决方法来解决这个问题,所有这些都很费力,可以被称为“黑客”。
虽然我没有做过太多的重新定位,但我相信这也会创建一个新的提交哈希。
我应该在我挑选的地方使用变基。与此相比,还有什么其他优势。
假设我有一个看起来像这样的git存储库:
merge-base---A1--A2------A3------A4 (branchA)
\
----------B1------B2 (branchB)
Run Code Online (Sandbox Code Playgroud)
为了简化操作,我们假设branchA上的提交是对fileA的严格修改,而branchB上的提交是对fileB的严格修改.
我想将这些分支组合成第三个分支,branchAB,其中提交将按日期排序:
merge-base---A1--A2------A3------A4 (branchA)
\
----------B1------B2 (branchB)
\
A1--A2--B1--A3--B2--A4 (branchAB)
Run Code Online (Sandbox Code Playgroud)
有没有办法用一个git命令自动执行此操作,还是我坚持使用手动方法(例如,cherry pick或rebase -i)?
BTW,merge-base是一个标签.
在我们的Git流程中,"master"是当前发布周期的主题和修复分支的集成分支,但我们还维护一个"稳定"分支,我们必须谨慎地向后移植已经在master上成功测试的一些修复.
所有困难都是分支已经合并回"master"(否则它很容易与rebase --onto)
我描述的初始情况图:
I--J (stable)
/
/
/
- A - B - C - D - E - F - G (master)
\ /
X -- Y (fix/123)
Run Code Online (Sandbox Code Playgroud)
我们想要达到的那种情况的图表:
I--J (stable)
/ \
/ X'- Y' (fix/123-stable)
/
- A - B - C - D - E - F - G (master)
\ /
X -- Y (fix/123)
Run Code Online (Sandbox Code Playgroud)
更复杂的情况是可能的,例如多次合并以完成修复:
- A - B - C - D - E - F - G - …Run Code Online (Sandbox Code Playgroud) 我在这里遇到了一些问题,我想从我的系统本地不存在的 git 存储库中挑选一个提交。
例如:https : //github.com/DespairFactor/N6/commit/ecea4ab6d3d8bb4122522398200f1cd2a06af6d5
通常的樱桃采摘程序包括做
1) git remote add <RepoName> <repoURL>
2)git fetch <RepoName>它会下载一个副本,但不会合并到您自己的本地存储库中。
3)git cherry-pick <commit SHA>樱桃挑选完成。
我的下载速度非常慢(1 mbps),而且我没有足够的时间为 1 次提交下载整个 repo。对不起,如果这个问题已经被问过并回答过。
是否有某种方法,也许使用git log,可以查看我在“ develop”中的任何提交是否尚未被挑选为“ otherbranch”?
例如,我进行了6次提交开发,然后选择5次提交其他分支。我可以执行什么git log命令来输出我错过的1个提交?
(我们所有的提交都通过Gerrit进行,因此任何基于Gerrit的解决方案也会有所帮助。)
完成https://learngitbranching.js.org后,我以为我有了樱桃挑选的想法,但事实证明我根本没有.
我创建了一个文件abc.txt并进行如下提交:
(write a) ? (write b) ? (write c)[master][HEAD]
Run Code Online (Sandbox Code Playgroud)
由此abc.txt变成了:
a
b
c
Run Code Online (Sandbox Code Playgroud)
现在,让一个分支from-a上(write a):
(write a)[from-a][HEAD] ? (write b) ? (write c)[master]
Run Code Online (Sandbox Code Playgroud)
和樱桃采摘(write c)[master],我认为它将abc.txt包含只有一个线和c线,即喜欢
a
c
Run Code Online (Sandbox Code Playgroud)
但它实际上导致:
a
<<<<<<< HEAD
=======
b
c
>>>>>>> 3a0882d... write c
Run Code Online (Sandbox Code Playgroud)
在这里,我的困惑是双重的.为什么它会冲突而不只是添加线?为什么它包含b-line,尽管我只选择樱桃write c?
我不是开发人员。在我们的一个项目中,由于很多票需要时间来完成,我们一直在挑选我们的提交,现在我们必须经常这样做。一位开发人员告诉我,应该避免挑选,因为它会使回购不稳定。这是什么意思,它如何使回购不稳定? 换句话说,采摘樱桃的负面后果是什么?
如何列出在Git中精心挑选的提交?让我们假设以下情况:cp = cherry-pick commit
cp1 cp2
master -----o------o------o-----o----o
\ / /
branch1 \----o------o-----o---o---o
Run Code Online (Sandbox Code Playgroud)
是否有一条日志命令列出cherry-pick提交cp1和cp2?
谢谢。
假设我正在master自己的存储库中工作.我的上游例如是main-upstream.
但我需要从另一个遥控器进行一次特定的提交 - special-upstream.我不希望从它进行其他更改 - 我不需要来自该远程的所有提交,我不希望它的任何更改 - 它是一个不同的项目 - 除了一个特定的提交与分支的某些哈希master.
有可能cherry-pick吗?
cherry-pick ×10
git ×10
rebase ×3
branch ×2
github ×2
date ×1
gerrit ×1
git-branch ×1
git-cherry ×1
git-rebase ×1
logging ×1
merge ×1