为什么git fetch origin master失败了?

3
假设我的本地仓库比github上的仓库落后了一个提交。
然后我在本地仓库提交了一个提交。
此时:
A------>提交1 Github/master A------>提交2 本地仓库/master 我按照以下步骤将提交2推送到github:
1. git fetch origin master 2. git rebase origin/master 3. git push origin master 但是我收到了以下错误:
如果我尝试用`git fetch origin`替换步骤1,它可以正常工作。
然后我尝试了`git fetch origin master:tmp`,成功创建了一个名为tmp的分支。
所以我的问题是:为什么`git fetch origin master`有时可以工作(在`git fetch origin master:tmp`的情况下),而有时在步骤1中不起作用?

1
你确定 git rebase origin/master 成功了吗?看起来好像不是。也许你可以展示一下输出信息。 - janos
@janos 请看我的更新。 - Charles0429
你使用的 Git 版本是什么? - CB Bailey
几乎是一个重复的问题,但不完全相同,链接在这里:https://dev59.com/N3I-5IYBdhLWcg3wqqTg#1743870。我猜测这是Git <1.8.4版本的问题。 - CB Bailey
@Charles0429,请同时展示git status的输出结果。 - janos
2个回答

8
这与是否工作无关,而是关于你要求git将下载的内容存储在哪里。如果在refpec中省略目标,则要求git将其存储在FETCH_HEAD中。因此,git fetch origin master实际上是git fetch origin master:FETCH_HEAD,你不会触及origin/master或任何参考(如输出所示,master -> FETCH_HEAD)。
当你运行git fetch origin master:tmp时,你要求它下载主分支(这是另一层,猜测你想处理分支)并将其存储在一个名为tmp的本地分支中。你也会在输出中看到这个映射。
如果你想更新远程跟踪分支,只需调用git fetch origin。很少需要调用带有两个参数的git-fetch版本。

3

与其

git fetch origin master
git rebase origin/master

你应该只需要做

git pull --rebase

那将做正确的事情。


1
如果主分支的上游分支设置为origin/master,它将执行“正确的操作”,这可能是也可能不是这种情况。 - Carlos Martín Nieto

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