Git:无法挑选樱桃

6
我在尝试挑选特定提交时陷入了一个奇怪的循环中。以下是我的操作和问题所在。
我有两个分支:主线(mainline)和临时(temp)。我想从主线挑选一个特定的提交到临时分支。我的操作如下:
1. `git checkout temp` 2. `git cherry-pick ` 3. 现在,我得到了“Segmentation fault: 11”错误。 4. 我重新运行第2步的命令,得到了“Unable to create ...git/index.lock': File exists”错误。
现在我执行以下步骤:
5. 运行`rm -f ./.git/index.lock` 6. 再次尝试`git cherry-pick ` 7. 现在我得到了这个错误:“error: The following untracked working tree files would be overwritten by merge: myfile.java”,但实际上这个文件并不存在于仓库中。
接下来我执行以下步骤:
8. 运行`git status`,发现文件`myfile.java`位于未跟踪文件中,并且甚至出现在编辑器中。我可以从编辑器中删除它,但无法从git仓库中删除它。我得到了`pathspec 'myfile.java' did not match any files`错误。 9. 所以我从编辑器中删除了该文件,重新运行`cherry-pick`,然后回到了第3步。
请问这里发生了什么,我应该如何完成我的挑选操作? :D

你有没有碰巧在 Windows 上使用 git? - fedepad
1
你不应该使用 rm .git/index.lock 命令,而是应该使用 git cherry-pick --abort 命令将代码库恢复到之前的状态,然后再尝试操作。 - axiac
@fedepad 不是,是Mac。 - wesleyy
2
嗯,因为如果是那种情况下我可能能够理解那个段错误,因为 git_windows_issue_checryr_pick - fedepad
@max630 我执行了 cherry-pick :) - wesleyy
显示剩余3条评论
2个回答

1
我不知道为什么会出现分段错误。建议确认使用的是最新的git版本。
另一种选择cherry pick的方法是从提交中创建补丁并应用它:
git checkout temp
git format-patch -1 <commit sha>
git apply 0001.....patch

分段错误只是我的问题之一。如果我重新运行命令,它就会消失,但是不同的错误会出现(第4步)。我不确定补丁是什么,我从未使用过。 - wesleyy
补丁文件只是一个文本文件,其中包含提交更改的内容。类似于 git diff 的输出。然后 git 知道如何将补丁应用于您的工作目录。 - Igal S.
这个 0001... 是什么? - wesleyy
1
这个解决方案可以运行,因为它避免了使用cherry pick,这似乎是问题所在。 - fedepad
1
@wesleyy 0001...补丁是前一个 git format-patch 命令生成的补丁文件。 - fedepad
2
@wesleyy,段错误是你问题的根源。其他问题只是它的后果。正如你所说:当你解决了后者,你又回到了前者。也许你想把这个问题带到git邮件列表中。只需写信给git@vger.kernel.org。一定要包括GIT_TRACE=2 git cherry-pick that-commit-sha1的输出,并包括你正在使用的版本(git version)。 - j6t

0

对我来说,升级到homebrew git 2.11.1解决了这个问题。

基于输出消息以及git-for-windows的pull request和上游提出的对话,以及这个邮件列表线程,似乎由于refresh_cache_entry()的返回值为空,导致分段错误(在我的情况下,我正在挑选的路径不存在于我所在的分支上)。

以下是我遇到的情况:

$ git cherry-pick d4c26fc1
Segmentation fault: 11

$ git cherry-pick --abort
error: no cherry-pick or revert in progress
fatal: cherry-pick failed

$ rm .git/index.lock

$ brew upgrade git
Updating Homebrew...
...
==> Summary
  /usr/local/Cellar/git/2.11.1: 1,456 files, 32.4M

$ git cherry-pick d4c26fc1
error: addinfo_cache failed for path 'foo/bar/baz'
error: could not apply d4c26fc... Some commit subject
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接