我挑选了一个提交并解决了冲突,将它们添加后,现在尝试进行git amend时失败了,出现以下消息。
致命错误:您正在进行一个精选 -- 无法修改。
为什么Git会给出这个消息,有没有办法告诉它一切正常?
我挑选了一个提交并解决了冲突,将它们添加后,现在尝试进行git amend时失败了,出现以下消息。
致命错误:您正在进行一个精选 -- 无法修改。
为什么Git会给出这个消息,有没有办法告诉它一切正常?
我手动删除了 .git/CHERRY_PICK_HEAD
,现在Git不知道我进行了一个cherry-pick操作,所以使用amend命令就像是对一个普通的提交进行修改一样。
cherry-pick --continue
会添加一个新的提交信息,需要重新进行变基(rebase),这很麻烦。
看起来你之前进行了一次cherry-pick
,由于冲突而失败。因此,git认为你仍处于cherry-pick
的中间状态,因为它期望你解决冲突、添加有冲突的文件并运行git cherry-pick --continue
。
你可以选择运行git cherry-pick --abort
来中止这个cherry-pick
,也就是将有冲突的文件返回到它们之前的状态,可能会失去一些更改;或者运行git cherry-pick --continue
来继续进行cherry-pick
。如果你不记得你何时以及使用哪个cherry-pick
,那么后者可能是更好的选择,但在--continue
命令之前和之后要密切关注你的存储库。
这两个命令都可以使你退出cherry-pick
状态,从而允许你执行修改操作。
当运行像 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'
git cherry-pick
。 - user4003407--continue
,当有冲突时与rebase相同。如果您想要修改带有冲突的提交,请只需添加文件,然后执行--continue
,无需修改。 - martin.malek