git pull总是失败,但git fetch / merge很好

时间:2014-12-21 19:11:41

标签: macos git git-merge git-pull

当我在任何存储库中git pull时,我总是会遇到以下合并错误:

aetherboard:shwangster shwangster$ git pull -v
From github.com:sirspinach/shwangster
 = [up to date]      master     -> origin/master
merge: 012012012012012012012012012012012012012012012012012012012012 - not
something we can merge

另一方面,git fetchgit merge origin/master就像一个魅力。所以我已经能够解决这个问题一段时间了。但是,我今天需要更新brew,同样的错误阻止我这样做。

以下是brew update的输出,它显示git再次尝试与神秘的0120120120120...合并。

aetherboard:gitrepos shwangster$ brew update
merge: 012012012012012012012012012012012012012012012012012012012012 - not 
something we can merge
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

1 个答案:

答案 0 :(得分:1)

Kaz在评论中指出,另一个(非常精确的重复)问题有一个线索,当pyenv取出$PATH时,问题就消失了。

这是来自pull脚本的位,该脚本采用FETCH_HEAD跟踪并将其转换为git merge的参数(或者在进行基线拉取时转换为git rebase):

merge_head=$(sed -e '/  not-for-merge   /d' \
        -e 's/  .*//' "$GIT_DIR"/FETCH_HEAD | \
        tr '\012' ' ')

(顺便说一下,请注意那些是not-for-merge之前和之后的选项卡以及sed的第二个-e参数。剪切和粘贴通常会将标签转换为空格,并在此处执行。)

我认为sed部分正常工作,tr调用失败。事实上,它看起来像正在使用的任何tr,只是吐出012字符串(总共60个字符,或三个字符组的20个实例 - 不知道这是怎么回事假设sed输出是或应该是40个字符的SHA-1。

如果您的shell为shbash,请参阅:

$ type tr

打印。如果您使用csh变体,which tr将显示它将运行的内容。 (我不确定在破折号和zsh中使用什么。)如果你得到的不是/usr/bin/tr,那可能解释了这个问题。 (如果你得到/usr/bin/tr,请看type sedwhich sed说的内容:这些应该是/usr/bin/sed。)