"未指定提交且未设置merge.defaultToUpstream"

Joh*_*tle 33 git

作为一个新的git用户,他是SVN和CVS的专家,我正在努力让最基本的git函数工作.

我在assembla.com上使用共享仓库

我创建了一个本地克隆,并添加了一个文件:

$ git clone repository-url
$ echo "hello" > ha.txt
$ git add -A
$ git commit -a -m "haha"
$ git push
Run Code Online (Sandbox Code Playgroud)

注意:此时我得到"没有共同的参考,没有指定;什么都不做"错误.经过几个小时的谷歌搜索,我发现解决方案是键入此

$ git push origin master
Run Code Online (Sandbox Code Playgroud)

然后我去了另一台计算机,修改了文件,并提交了它(令人惊讶的是,我不需要做git push origin magic).然后我回到主计算机,再次修改它,所以我可以看到合并是如何工作的.

$ git fetch
$ git merge
Run Code Online (Sandbox Code Playgroud)

现在我收到错误:

致命:未指定提交且未设置merge.defaultToUpstream.

查看"git merge"的手册页,你必须指定如下内容:

$ git merge [< commit >..]
Run Code Online (Sandbox Code Playgroud)

问题是,我无法找出什么< commit >意思,应该是什么.例如它应该是文件,回购,消息,版本吗?

我还没有创建一个分支 - 我只是在研究"头"或主人,因为我认为git称之为

不幸的是,谷歌对这个没什么帮助.手册页似乎希望你知道什么是< refspec >,< commit >origin是.

任何关于这个noob问题的帮助表示赞赏.

ata*_*man 42

通常你不用git merge没有参数调用(至少我不知道有谁做过).如果您希望merge默认为跟踪分支,则需要设置merge.defaultToUpstream为true : git config merge.defaultToUpstream true. 在这种情况下,您的master分支机构必须跟踪origin/master:git branch --set-upstream master origin/master.如果origin/master克隆时已经存在,则自动完成.

就个人而言,我git fetchgit merge origin/master或者git pull,如果我没有本地提交.

编辑:由于VonC提到自Git 2.0以来的merge.defaultToUpstream默认值true.


Von*_*onC 7

注意:如果您的master分支已经跟踪origin/master(您可以看到git branch -avvv,或者更长的别名),那么a git merge 将不再显示:

fatal: No commit specified and merge.defaultToUpstream not set.
Run Code Online (Sandbox Code Playgroud)

下一GIT中2.à.x(Q3 2014)将删除错误消息:
看到提交a01f7f2菲利普Contreras的(felipec):

merge:defaulttoupstream默认启用

这没有意义:

% git merge
fatal: No commit specified and merge.defaultToUpstream not set.
Run Code Online (Sandbox Code Playgroud)

我们知道最可能的情况是用户想要合并上游,如果没有,他可以设置merge.defaultToUpstream为false.

这意味着你不再需要做一个:

git config merge.defaultToUpstream true
Run Code Online (Sandbox Code Playgroud)


Hon*_*onk 5

阅读Pro Git,这是一个了解Git的好方法.

它将告诉您,merge没有创建分支并且没有将分支设置为合并源的情况完成,没有任何意义.

它还会告诉你它们之间的区别git fetchgit pull重要性.

获取更改不会移动您的分支,但拉动确实如此.