Why call git branch --unset-upstream to fixup?
谈到Git的高级操作,我更像是个新手。我使用博客框架octopress维护我的博客。虽然Octopress自2011年以来没有任何发展,但它很好地服务于我的目标,所以我至今没有想过要改变任何东西。
仅供参考,我的博客托管在Github页面上。
今天,在处理一个新的帖子时,
1 2 3 | On branch source Your branch is based on 'origin/master', but the upstream is gone. (use"git branch --unset-upstream" to fixup) |
对所有后续命令重复相同的消息,如
- 这条信息是什么意思?
- 什么东西坏了吗?
- 如果是,什么?
- 我需要修一下吗?
如果可能的话,请指给我一篇PDF/Web文章,在那里我可以读到这篇文章,并为将来理解它。
更多详细信息:
1 2 3 4 5 6 7 8 9 10 11 | bash-3.2$ git branch -a * source remotes/octopress/2.1 remotes/octopress/HEAD -> octopress/master remotes/octopress/gh-pages remotes/octopress/linklog remotes/octopress/master remotes/octopress/refactor_with_tests remotes/octopress/rubygemcli remotes/octopress/site remotes/origin/source |
号
如果需要更多信息,请告诉我。谢谢。
tl;dr版本:远程跟踪分支
对于另一个上游设置,请参见为什么必须"git push--set upstream origin 这个警告在Git中是一个新东西,在Git 1.8.5中首次出现。发行说明仅包含一个简短的项目符号:好的。 号 要描述它的含义,首先需要了解"远程"、"远程跟踪分支",以及Git如何处理"跟踪上游"。(远程跟踪分支是一个非常有缺陷的术语——我已经开始使用远程跟踪名称,我认为这是一个轻微的改进。不过,在下面,我将使用"远程跟踪分支"来与Git文档保持一致。)好的。 每个"远程"都只是一个名称,在本例中类似于 "远程跟踪分支"(或远程跟踪名称)只不过是某个"远程"上最后看到的分支名称的记录。每个远程本身就是一个Git存储库,所以它有分支。远程"源站"上的分支记录在您的本地存储库中的 (当然,"普通"或"本地"分支只是您在自己的存储库中创建的分支名称。)好的。 最后,您可以设置一个(本地)分支来"跟踪"一个"远程跟踪分支"。当本地分支 在这种情况下,这是不可能的。您有一个本地分支 你不需要知道git如何建立本地分支来跟踪远程分支的确切机制,但是它们在下面是相关的,所以我将展示这是如何工作的。我们从你当地的分行名称开始, 把这些放在一起,2这告诉Git你的分支 但是现在看看 Git告诉您可以使用 不过,您可能希望从跟踪 您可以使用 号 (假设你仍然在"来源"分支上,而 (另请参见如何使现有Git分支跟踪远程分支?)好的。 我想你在这里的方式是,当你第一次做一个 就在这时,"上游"链接断开了,但在1.8.5之前的Git版本中,Git从未注意到断开的设置。既然你有了1.8.5,它就指出了这一点。好的。 这涵盖了大部分问题,但不是"我需要解决它吗"的问题。很可能你多年来一直在努力解决这个问题,通过做 上游的目的是使各种操作更加方便。例如,如果上游设置正确, 如果您需要方便,请重新设置上游。好的。 1 这个加上一条配置线,我故意忽略了在 3或,使用 托雷克的回答可能是完美的,但我只是想让记录员提到另一个不同于原始问题中描述的情况,但同样的错误可能会出现(因为它可能帮助其他有类似问题的人): 我在一台服务器上使用 在本地回购上提交单个版本后,我在调用 在Torek的回答之后,我了解到发生的事情是本地工作目录repo上的第一次提交创建了"master"分支。但是在远程报告(在服务器上)上,没有任何内容,所以甚至没有"master"(远程/源站/主服务器)分支。 在本地repo运行 因此,总结一下,对于一个新的零提交的远程回购来说,可能会出现这样的错误,因为它没有分支,包括"master"。
branch that is not based on any other branch, a branch that is in
sync with its upstream branch, and a branch that is configured with an
upstream branch that no longer exists.
2
3
4
origin
$ git config --get branch.source.merge
refs/heads/master
对我来说,以东十一〔十四〕已经腐败了。
我做了以下工作,为我解决了这个问题。
1 2 3 | rm .git/refs/remotes/origin/master git fetch git branch --set-upstream-to=origin/master |
。
这可能会解决你的问题。
完成更改后,您可以提交它,然后
1 2 3 | git remote add origin https://(address of your repo) it can be https or ssh then git push -u origin master |
希望它对你有用。
谢谢
我有过两次这个问题,它总是由我本地分支的Git缓存文件的损坏引起的。我通过将丢失的提交哈希写入该文件来修复它。我从服务器获得了正确的提交哈希,并在本地运行了以下命令:
1 2 3 | cat .git/refs/remotes/origin/feature/mybranch \ echo 1edf9668426de67ab764af138a98342787dc87fe \ >> .git/refs/remotes/origin/feature/mybranch |
。
实际上,托雷克已经告诉过你如何更好地使用这些工具。但是,在这种情况下,如果您遵循http://octopress.org/docs/deployment/github/上的指导原则,我认为指出一些特别的地方是很重要的。也就是说,您的设置中将有多个Github存储库。首先是目录
足够的介绍。在这种情况下,错误也可能来自
1 2 3 4 5 6 | cd _deploy git branch -a * master remotes/origin/master remotes/origin/source |
在
1 2 3 4 5 6 7 8 9 10 11 | [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote"origin"] url = [email protected]:yourname/yourname.github.io.git fetch = +refs/heads/*:refs/remotes/origin/* [branch"master"] remote = origin merge = refs/heads/master |
号
但在您的情况下,分支主机没有远程。
1 2 3 4 5 6 7 8 | [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote"origin"] url = [email protected]:yourname/yourname.github.io.git fetch = +refs/heads/*:refs/remotes/origin/* |
你可以通过以下方法来解决:
1 2 | cd _deploy git branch --set-upstream-to=origin/master |
。
所以,一切都是托雷克告诉你的,但重要的是要指出,这很可能涉及到
附言:用一个像