zhi*_*fan 6 git git-cherry-pick
鉴于我有 3 个提交
c1
+ print("A")
c2
+ print("B")
c3
+ print("C")
Run Code Online (Sandbox Code Playgroud)
然后我在 c1 结帐了一个新分支。
git checkout -b br c1
Run Code Online (Sandbox Code Playgroud)
然后我挑选c3。
git cherry-pick c3.
Run Code Online (Sandbox Code Playgroud)
我想要的是文件有
print("A")
print("C")
Run Code Online (Sandbox Code Playgroud)
-- 我只选择 c3,c3 只需添加一行 print("C")
但事实是我遇到了冲突,结果是
print("A")
++<<<<<<< HEAD
++=======
+ print("B")
+ print("C")
++>>>>>>> f1383aa... C
Run Code Online (Sandbox Code Playgroud)
我的问题是: 1.为什么会发生冲突?2.如果我想要print("A")和print("C")怎么办?
我也尝试过即使我
git diff C^1 .. C > 1.patch
git apply 1.patch
Run Code Online (Sandbox Code Playgroud)
我有
zhifan@zhifandeMacBook-Pro ~/g/demo> git apply 1.patch
error: patch failed: 1.py:1
error: 1.py: patch does not apply
Run Code Online (Sandbox Code Playgroud)
择优挑选本质上是复制提交(的效果)。您可以将其视为\xe2\x80\x94,即,将要选择的提交及其父级进行 diff ,然后将该 diff 应用于当前 commit。然而,它比单纯的 diff-and-apply 更强大,因为它可以访问 Git 的完整合并机制。
\n\n这意味着这git cherry-pick实际上是一个完整的git merge内部提交,两个提交被合并为您当前的提交\xe2\x80\x94您的HEAD\xe2\x80\x94和您正在挑选的提交。此操作的合并基础是您正在挑选的提交的父级。
这样做的原因是,正如您所看到的,如果您的提交和您正在挑选的提交都更改了“相同”行,则可能会出现合并冲突。HEAD在这种情况下,您的HEAD提交添加了行print("A"),可能在文件末尾,但无论如何都在其他行之前。同时,您告诉 Git tocherry-pick\xe2\x80\x94commit c3\xe2\x80\x94 的提交会print("C") 在同一位置(在文件末尾或同一现有行之前)添加该行。Git 不知道在哪里放置添加的print,因此它声明冲突并让您选择正确的答案。
解决方案很简单:在编辑器中打开冲突文件并调整它以包含冲突的正确解决方案,然后将其写出来并git add在文件上使用,以便您可以运行git cherry-pick --continue来完成挑选过程。或者,如果您愿意,可以使用合并工具获取所有三个输入文件(基本文件、“我们的”或HEAD以及“他们的”或 c3\ 的版本)并以这种方式解决冲突。
有关樱桃挑选的更多信息,请参阅使用 git 进行cherry-picking提交意味着什么?
\n| 归档时间: |
|
| 查看次数: |
4050 次 |
| 最近记录: |