假设我有一个包含内容的文本文件
A
我提交文件(commit febcdb0)。然后我做了另一个更改,现在该文件包含:
A
B
它已提交(提交0d03344)。然后我做了另一个改变:
A
B
C
它也承诺(4077fb8)。有没有办法删除第二次提交,所以我最终得到:
A
C
没有像这样的冲突结束:
A
<<<<<<< HEAD
B
C
======
>>>>>>> parent of 0d03344... B
那是 - 我特别想要上次提交时引入的更改,但我想放弃上一次提交的更改?
我尝试过互动式单挑和樱桃采摘,但似乎没什么用。
所以,如果我这样做:
git checkout fedcbd0
git checkout -b test
git cherry-pick 4077fb8
我得到了回复:
Automatic cherry-pick failed. After resolving the conflicts,
mark the corrected paths with 'git add <paths>' or 'git rm <paths>'
and commit the result with:
git commit -c 4077fb8
文件内容与上述冲突有关。
答案 0 :(得分:1)
使用git cherry-pick
,您可以应用某些现有提交所引入的更改。在你的情况下,你可以回到第一个提交并创建一个新的分支,然后使用cherry-pick在那里应用最后的提交,以便最后你将删除第二个提交
git checkout -b new_branch febcdb0
git cherry-pick 4077fb8
答案 1 :(得分:1)
在不造成合并冲突的情况下,这样做并不是一个好方法。在提交4077fb8中,行C
在行B
之后和文件结尾之前添加。如果您尝试直接将该更改应用于febcdb0,Git将无法在C
和文件结尾之间准确插入新行B
,因为没有行B
。因为这个更改距离之前的提交0d03344还不够远,所以Git在此处谨慎行事,并生成必须解决的合并冲突。