问题是你正试图推动非裸机回购.非裸仓库是具有关联工作树的仓库(即,文件实际上已签出到磁盘).默认情况下,Git不会让你推送到非裸仓库; 推到非裸露的回购仅更新Git的内部数据结构,并不会不改变工作树(磁盘上的文件),这意味着,如果你再回去给你推到了回购,并开始对文件的工作,你我将处理这些文件的旧版本.当然,当您尝试提交更改时,这会导致问题.
执行此操作的最佳方法是推送到裸存储库,这是通过在创建存储库--bare
时将标志传递给Git而创建的存储库:
$ mkdir new_repo $ cd new_repo $ git --bare init
当然,裸仓库不会检出任何文件,因此您无法实际使用它(您必须首先克隆它).
如果你仅仅使用一个Git回购当地发展(而不是共享或服务Git的回购),你不具备有远程回购推到; 您可以处理本地非裸仓库的单个副本.
问题是你正试图推动非裸机回购.非裸仓库是具有关联工作树的仓库(即,文件实际上已签出到磁盘).默认情况下,Git不会让你推送到非裸仓库; 推到非裸露的回购仅更新Git的内部数据结构,并不会不改变工作树(磁盘上的文件),这意味着,如果你再回去给你推到了回购,并开始对文件的工作,你我将处理这些文件的旧版本.当然,当您尝试提交更改时,这会导致问题.
执行此操作的最佳方法是推送到裸存储库,这是通过在创建存储库--bare
时将标志传递给Git而创建的存储库:
$ mkdir new_repo $ cd new_repo $ git --bare init
当然,裸仓库不会检出任何文件,因此您无法实际使用它(您必须首先克隆它).
如果你仅仅使用一个Git回购当地发展(而不是共享或服务Git的回购),你不具备有远程回购推到; 您可以处理本地非裸仓库的单个副本.
首先,您不需要克隆本地存储库.您可以使用分支在同一存储库中划分开发.
Git是一个分布式VCS,如果您之前有Subversion或CVS的经验,那么您需要改变主意.
Git非常敏捷,您可以使用不同的工作流程.团队工作更需要克隆存储库,而不是本地开发(IMHO).
分店是您的理想选择.
看到.让我们为您的存储库设置master分支,以获得生产就绪的代码.让我们为开发创建另一个分支:
$ git checkout -b development master
现在您正在开发分支.
您可以为要开发的每个功能使用不同的分支.这非常简单,乐于助人.
让我们假设你想要实现一些新功能,你需要创建一个新的分支:
$ git checkout -b newfeature development
现在您可以使用代码,添加文件,提交等等.
接下来,您需要将新开发的功能合并到开发分支:
$ git add . $ git commit -m "My last changes for the new feature" $ git checkout development $ git merge newfeature
现在,来自newfeature分支的新代码合并到开发分支中.
在将来的某个时候,当您确定开发分支中的代码获得某个里程碑时,您可以将所有更改从开发合并到主分支.
这是一个非常基本的工作流程,它可以为许多分支机构提供帮助.
我现在为您提供建议:阅读更多关于git,分支,存储的信息(非常非常有助于快速修复).过了一段时间,你会从使用git中获得很大的努力.
祝好运.
这是成功的git工作流程的最清晰,最全面的描述.它基本上涵盖了谢尔盖建议的内容,增加了一些非常丰富的图形.
一个成功的Git分支模型
作者还建议您在合并时包含--no-ff
标记以记录您在历史记录中有特征分支的事实.