我cherry-picked
提交并解决了冲突,添加了它们,现在当我尝试执行git修改时失败并显示以下消息。
致命:你正在挑选樱桃 - 无法修改。
为什么git会给出这个消息,有没有办法告诉它一切正常?
答案 0 :(得分:3)
我手动删除.git/CHERRY_PICK_HEAD
现在git不知道我做了一个挑选,所以修改工作就像是正常的提交修改。
cherry-pick --continue
添加了一个新的提交消息,并且需要重新绑定这是一个麻烦。
答案 1 :(得分:1)
答案 2 :(得分:1)
之前你似乎做了一个cherry-pick
,由于冲突而失败了。因此,git认为你仍然处于挑选的中间,因为它希望你修复冲突,添加冲突的文件并运行git cherry-pick --continue
。
这里你的选择是运行git cherry-pick --abort
,这将中止樱桃选择,即将冲突的文件返回到之前的状态,可能会丢失更改,或运行git cherry-pick --continue
,这将继续樱桃选择。当你不记得使用樱桃选择的时间和内容时,这可能是更好的选择,尽管你应该在--continue
命令之前和之后密切关注你的存储库。
这两个命令都会让你退出樱桃挑选状态并允许你进行修改。
答案 3 :(得分:0)
在运行cherry-pick
,rebase
或merge
等操作时,git
会跟踪基本提交的几个信息。
防止修改基本提交似乎是合理的安全。
我建议你以某种方式完成cherry-pick
,然后使用rebase -i
来修改你想要的提交顺序。
如果我们使用以下名称:
--*--*-- ... --A--B <- HEAD
\
*-- ... X <- cherry-picked commit
# you are currently on B, you run :
git cherry-pick X
如果您希望达到:
--*--*-- ... --A--B'--X' <- cherry-picked version of X
\ ^
\ a modified version of B
*-- ... X
你可以:
# add the modifications intended for B' :
git add -p [files]
# create a regular commit, using "git commit" :
git commit
--*--*-- ... --A--B--C
# complete the cherry-pick process :
git add [files with solved conflicts]
git cherry-pick --continue
--*--*-- ... --A--B--C--X'
# use 'rebase -i A' to squash B and C into one commit
git rebase -i A
# set the rebase actions to "squash C into B"
# the result should be what you expect :
--*--*-- ... --A--B'--X'