可能已经有人问过这个问题,但搜索后找不到我想要的东西。
我创建了一个项目并将其推送到github上,然后决定将其用作新项目的样板。因此,我将其克隆到桌面上,然后进行了完全重新设计。项目完成后,我决定在github上创建自己的仓库,并尝试将其推高。但是,这最终导致了我重新设计的项目恢复到其原始状态。我可以通过在所有文件上按CTRL Z来更正此问题(LOL)。我需要找到一种完全分离项目的方法。当我尝试将原始文件推送到git hub时,出现以下错误:
“更新被拒绝,因为远程包含您在本地没有的工作。这通常是由另一个存储库推送到相同的引用引起的。您可能需要先集成远程更改(例如,'git pull ...'),然后再进行再推。”
为了澄清,我不想将两个项目合并或合并在一起,或者最终删除其中一个项目。如果有可能,我想找到一种方法来制作克隆的项目,然后更正原始项目的上述错误。
假设您的样板就在,git@github.com:foo/boilerplate.git
并且您希望它成为新项目的基础git@github.com:foo/project.git
。
在github网站上,创建一个名为的空存储库project
。
将样板存储库克隆到名为的新目录中project
。
git clone git@github.com:foo/boilerplate.git project
Git会记住该远程地址,因此默认情况下它可以从那里推/拉。但是您不想要这样:相反,从现在开始,您要git push
推送到project.git
github上的存储库,而不是存储boilerplate.git
库。git remote set-url
告诉git这project.git
是您的新来源(即,用于推和拉的默认遥控器)。
cd project git remote set-url origin git@github.com:foo/project.git
现在,git push
将推送到project.git
仓库。
(可选)将样板添加为单独的遥控器(但不添加origin
,因此您不会偶然使用它):
git remote add boilerplate git@github.com:foo/boilerplate.git
现在,当您更新样板时,您也可以将这些更改合并到您的项目中。(如果样板文件在您的存储库中往往不会发生太大变化,则可以很好地工作project
。)
git pull boilerplate master
要将boilerplate.git
回购回滚到您希望其分散的程度,您只需要push -f
。两种方式:
如果您在意外将内容推送到github之前仍然有样板存储库的本地副本,请回到那里运行git push -f
。这将从github上的样板存储库中删除“您本地没有的工作”-但是您现在已经在单独的存储库中找到了这些东西,对吗?(您至少应该三思而后行git push -f
。Git试图帮助您避免意外删除内容。请勿故意删除内容!)
克隆样板。使用git log
,找到您希望保留的提交,例如abc1234
。通过运行将github repo的“ master”分支重置为该提交git push -f origin abc1234:master
。
要查看原点指向的位置(以及您拥有的其他遥控器),请运行git remote -v
。