- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
事情要从一次不规范的代码开发开始说起 。
时间 。
2024年某个风平浪静的周五晚上 。
地点 。
中国,北京,西二旗,某互联网大厂会议室 。
人物 。
小杰,小A,小B,老K 。
对话 。
老K:昨天提交的代码被测试打回来了!为什么小B没开发完的内容也一起提交上去了?
小B:啊?我不清楚啊,我在开发分支B开发完一部分就提交到test分支进行联调了啊 。
小A:额(''!),我把test分支合并到发布分支提交给测试了,因为我跟小杰最开始在各自的分支开发,但是中间联调的时候,为了图方便直接在test分支上改,改来改去就直接在test分支上开发了。。.
老K:什么?你怎么能直接在test分支开发?
老K:正确的开发流程规范应该是:现在各自的开发分支上开发,然和合并到test分支上进行联调,联调没有问题在提交发布release分支进行测试和部署,验证没问题在把各自的开发分支合并到基线分支master 。
老K:现在要把代码回滚,谁做的事情谁负责。小杰,你去把test分支上的代码抽出来放到单独一个开发分支上 。
小杰:啊?
小杰接受这个任务,准备把test分支上他跟小A多次提交的内容跟转移到一个纯净的开发分支,小杰决定使用git cherry pick 这个命令 。
git cherry-pick 是 Git 中的一个非常有用的命令,它允许你从一个分支中选择特定的提交(commit)应用到当前的分支。这个命令在需要引入某些特定功能或修复而不想进行完整的分支合并时特别有用.
假设你有以下 Git 分支结构:
* 5a3d5f2 (feature) Add new feature
* c7e33a5 Fix bug B
* 1a2b3c4 Fix bug A
* 9d8e7f6 (main) Initial commit
现在你在 main 分支上,想要将 feature 分支中修复 bug A 的提交 (1a2b3c4)引入当前分支。你可以这样做:
切换到目标分支(假设是 main 分支):
git checkout main
使用 git cherry-pick 命令:
git cherry-pick 1a2b3c4
执行上述命令后,提交 1a2b3c4 的更改会被应用到 main 分支上.
使用范围(range)来批量 cherry-pick. 假设你要 cherry-pick 从 commitA 到 commitB 之间的所有 commit(包含 commitA 但不包含 commitB),你可以使用以下命令:
git cherry-pick commitA^..commitB
使用多个单独的 commit 来批量 cherry-pick . 假设你有一系列的 commit 哈希 commit1, commit2, commit3,你可以使用以下命令:
git cherry-pick commit1 commit2 commit3
解决可能的冲突:在 cherry-pick 的过程中,如果遇到冲突,Git 会提示你。你需要手动解决这些冲突并继续 cherry-pick 。
# 解决冲突后,添加解决后的文件
git add <conflicted-file>
# 继续 cherry-pick
git cherry-pick --continue
cherry-pick
的过程中,存在文件冲突,Git 会暂停操作,并提示冲突文件。你需要手动解决这些冲突,然后使用 git add <file>
添加解决后的文件,最后运行 git cherry-pick --continue
继续操作。如果你想中止 cherry-pick
,可以使用 git cherry-pick --abort
。cherry-pick
可能会导致提交历史变得复杂。在使用前,评估是否可以通过别的操作(如合并或重置)来实现相同的目标。cherry-pick
了一个提交,再次尝试 cherry-pick
同一个提交可能会引发问题。Git 会提示你已经包含了相同的更改。cherry-pick
这些提交时需要注意顺序,以避免破坏代码的完整性。# Step 1: 创建新的分支 xsj_0701
git checkout master
git pull origin master
git checkout -b xsj_0701
# Step 2: 查看 stable_test 分支的 commit 历史
git log stable_test
# Step 3: 批量 cherry-pick commit
git checkout xsj_0701
git cherry-pick commitA^..commitB # 使用范围
# 或者
git cherry-pick commit1 commit2 commit3 # 使用多个单独的 commit 哈希
# Step 4: 解决可能的冲突
# 解决冲突后
git add <conflicted-file>
git cherry-pick --continue
# Step 5: 推送新的分支
git push origin xsj_0701
小杰使用批量范围cherry-pick,这个范围大约包含了10个commit,正当小杰吭哧吭哧的解决几个冲突之后,cherry-pick突然停止,没有冲突,查看当前commit也只到add cache这个提交这里,如下图所示 。
为什么cherry-pick会停止呢?
小杰经过观察发现,停止的位置是merge节点 。
当你尝试 cherry-pick 一个 merge commit 时,Git 需要更多信息来决定如何处理合并。默认情况下,Git 不会自动 cherry-pick merge commit,因为它无法确定你想要保留哪个分支的变更.
要解决这个问题,你可以使用以下方法:
方法 1: 跳过 merge commit 。
如果你不需要 cherry-pick 这个 merge commit,可以手动跳过它。你可以通过在失败后继续 cherry-pick 后续的 commit 来实现:
在发生停止后,手动跳过 merge commit 并继续 cherry-pick 后续的 commit
git cherry-pick --skip
# 然后继续 cherry-pick 后续的 commit
git cherry-pick <remaining-commits>
方法 2: 使用 cherry-pick -m 选项 。
如果你确实需要 cherry-pick 这个 merge commit,可以使用 -m 选项。-m 选项需要一个参数来指定父提交的索引,通常使用 1 表示第一父提交.
git cherry-pick -m 1 5b30dd90
git cherry-pick <remaining-commits>
# Step 1: 创建新的分支 xsj_0701
git checkout master
git pull origin master
git checkout -b xsj_0701
# Step 2: 查看 stable_test 分支的 commit 历史
git log stable_test
# Step 3: 批量 cherry-pick commit
git checkout xsj_0701
git cherry-pick commitA^..commitB # 使用范围
# 或者
git cherry-pick commit1 commit2 commit3 # 使用多个单独的 commit 哈希
# Step 4: 解决可能的冲突
# 解决冲突后
git add <conflicted-file>
git cherry-pick --continue
# Step 5: 跳过merge节点
git cherry-pick --skip
# Step 6: 推送新的分支
git push origin xsj_0701
经过一下午的奋战,小杰终于把test分支上的开发内容都迁移到纯净开发分支,然后屁颠屁颠去跟老K汇报了 。
最后此篇关于面试官:你了解gitcherry-pick吗?的文章就讲到这里了,如果你想了解更多关于面试官:你了解gitcherry-pick吗?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我开始在 Ethereum blockchain 上了解如何开发智能合约以及如何写 web-script用于与智能合约交互(购买、销售、统计......)我得出了该怎么做的结论。我想知道我是否正确理解
我正在 UIView 中使用 CATransform3DMakeRotation,并且我正在尝试进行 45º,变换就像向后放置一样: 这是我拥有的“代码”,但显然没有这样做。 CATransform3
我目前正在测试 WebRTC 的功能,但我有一些脑逻辑问题。 WebRTC 究竟是什么? 我只读了“STUN”、“P2P”和其他...但是在技术方面什么是正确的 WebRTC(见下一个) 我需要什么
我在看 DelayedInit在 Scala in Depth ... 注释是我对代码的理解。 下面的 trait 接受一个非严格计算的参数(由于 => ),并返回 Unit .它的行为类似于构造函数
谁能给我指出一个用图片和简单的代码片段解释 WCF 的资源。我厌倦了谷歌搜索并在所有搜索结果中找到相同的“ABC”文章。 最佳答案 WCF 是一项非常复杂的技术,在我看来,它的文档记录非常少。启动和运
我期待以下 GetArgs.hs打印出传递给它的参数。 import System.Environment main = do args main 3 4 3 :39:1: Coul
private int vbo; private int ibo; vbo = glGenBuffers(); ibo = glGenBuffers(); glBindBuffer(GL_ARRAY_
我正在尝试一个 for 循环。我添加了一个 if 语句以在循环达到 30 时停止循环。 我见过i <= 10将运行 11 次,因为循环在达到 10 次时仍会运行。 如果有设置 i 的 if 语句,为什
我正在尝试了解 WSGI 的功能并需要一些帮助。 到目前为止,我知道它是一种服务器和应用程序之间的中间件,用于将不同的应用程序框架(位于服务器端)与应用程序连接,前提是相关框架具有 WSGI 适配器。
我是 Javascript 的新手,我正在尝试绕过 while 循环。我了解它们的目的,我想我了解它们的工作原理,但我在使用它们时遇到了麻烦。 我希望 while 值自身重复,直到两个随机数相互匹配。
我刚刚偶然发现Fabric并且文档并没有真正说明它是如何工作的。 我有根据的猜测是您需要在客户端和服务器端都安装它。 Python 代码存储在客户端,并在命令运行时通过 Fabric 的有线协议(pr
我想了解 ConditionalWeakTable .和有什么区别 class ClassA { static readonly ConditionalWeakTable OtherClass
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我还没有成功找到任何可以引导我理解 UIPickerView 和 UIPickerView 模型的好例子。有什么建议吗? 最佳答案 为什么不使用默认的 Apple 文档示例?这是来自苹果文档的名为 U
我在看foldM为了获得关于如何使用它的直觉。 foldM :: Monad m => (a -> b -> m a) -> a -> [b] -> m a 在这个简单的例子中,我只返回 [Just
答案What are _mm_prefetch() locality hints?详细说明提示的含义。 我的问题是:我想要哪一个? 我正在处理一个被重复调用数十亿次的函数,其中包含一些 int 参数。
我一直在读这个article了解 gcroot 模板。我明白 gcroot provides handles into the garbage collected heap 然后 the handle
提供了一个用例: 流处理架构;事件进入 Kafka,然后由带有 MongoDB 接收器的作业进行处理。 数据库名称:myWebsite集合:用户 并且作业接收 users 集合中的 user 记录。
你好 我想更详细地了解 NFS 文件系统。我偶然发现了《NFS 图解》这本书,不幸的是它只能作为谷歌图书提供,所以有些页面丢失了。有人可能有另一个很好的资源,这将是在较低级别上了解 NFS 的良好开始
我无法理解这个问题,哪个更随机? rand() 或: rand() * rand() 我发现这是一个真正的脑筋急转弯,你能帮我吗? 编辑: 凭直觉,我知道数学答案是它们同样随机,但我忍不住认为,如果您
我是一名优秀的程序员,十分优秀!