我想出了一个关于git push的问题。
它以前运作成功,但这次失败了。
一开始,我在我的主人MINGW64 /d/javasoft/apache-tomcat-7.0.70/webapps/MyNote (master)
,然后,
git remote add origin
来关联我的远程来源,但它警告fatal: remote origin already exists.
git remote rm origin
(有人告诉我),没关系。git remote add origin https://github.com/***/***.git
。没关系。git push -u origin master
(我尝试了git push origin master
,但之前由于某种原因丢失了我的本地整个.git
,所以我想这可能是第一次推送,并且我应该添加-u
)。但是,它会提醒error: failed to push some refs to 'https://github.com/***/***.git'
git pull origin master
之前我应该使用push
,我就这样做了。但是,它提醒:fatal: refusing to merge unrelated histories
。 fatal: Couldn't find remote ref –allow-unrelated-histories
真的不知道怎么办...只想推..
答案 0 :(得分:75)
这不能很快回答。
警告:不应使用--allow-unrelated-histories
标记,除非您知道什么是不相关的历史记录并且确定您需要它。引入该检查只是为了防止人们在错误地合并无关项目时发生灾难。
据我了解,在您的情况下发生了以下:
您已经在某个时间点克隆了一个项目1
,并进行了一些开发以指向2
。与此同时,项目已经发展到某一点3
。
然后,由于某种原因,您丢失了本地.git子目录 - 其中包含从1
到2
的所有历史记录。您设法恢复了当前状态。
但现在它没有任何历史 - 看起来整个项目无处不在。如果你要求git合并它们,它将无法说明你的更改在哪里,所以它可以将它们添加到远程项目,据我所知,它只会报告大量的添加/添加冲突。
你应该做什么现在是从你克隆项目的远程历史中找回提交1
(我假设你之后没有拉,如果你那么做的话你应该寻找你已经拉过的最后一次提交。然后你应该修改你的历史,以便从那个提交1开始,然后git将能够正确合并(例如拉)。
所以,这些步骤(假设你现在处于没有历史记录的恢复提交中):
1
克隆的提交1?
的位置git diff _1?_..HEAD
,仔细阅读,确保差异仅包含您所做的编辑。如果它包含更多,那么你应该选错了1?
并需要调整它并重复这一步1
后,您应该将其设为您的父级,执行git --reset --soft _1_
,然后git commit
。现在看起来你已经从1
克隆了,然后用你所做的所有更改进行了一次提交。您的旧.git
目录无论如何都会丢失您的中间历史记录,但现在您可以运行git pull
- 它将正确合并。
答案 1 :(得分:-3)
尝试将更改提交到本地存储库。在将它们推送到GITHUB之前。它可以解决问题(我有类似的问题)。