将工作树更新为Git的HEAD

时间:2010-02-06 22:11:41

标签: git version-control

我想我说的都是正确的。

我有一个带Git的登台服务器,我的伙伴和我从我们当地克隆的那个仓库推动对Git仓库的更改,当我们准备公开的时候,我们标记它就是全部,但是我必须做一个git reset --hard来将服务器上的实际文件更新为HEAD,这对我来说有点奇怪。

我认为这个问题可能是对git如何运作的根本误解。通常我将我的代码分支到我的本地仓库,处理它,然后将其合并到主仓库,然后git push,这是正确的吗?

对不起,对于git来说,我是一个新手,任何使用远程git repos的资源都将非常感谢,谢谢!

4 个答案:

答案 0 :(得分:7)

听起来你正在推动服务器上的非裸仓库。当您推送到仓库时,会更改仓库的内部状态,但不会更新签出的文件,这就是您必须执行git reset --hard(或git checkout)签出更新副本的原因的文件。由于这个原因,建议只推送到一个裸仓库。您可以使用git --bare initgit clone --bare创建一个裸仓库。

答案 1 :(得分:2)

扎克,

我认为问题在于您的远程数据库不是裸存储库(即,它有一个与之关联的工作树)。您应该从不推入非裸存储库,因为这会更新索引/缓存,但不会更新工作树。 (非裸)存储库工作树仅在运行“git reset --hard”时才能正确更新,因为此命令会更改工作树状态以反映上次提交的状态,即您刚推送的提交。

应使用“--bare”标志创建远程存储库,即,您应该通过调用来创建存储库:

$ git init --bare

然后您可以正确地将更改推送到其中。

我描述了使用多个存储库here的开发工作流程,而我在本文的第二部分提供了脚本/别名/提示。

答案 2 :(得分:1)

优秀的资源是Scott Chacon的Pro Git书。它可以在http://progit.org/book

在线找到

答案 3 :(得分:1)

我不完全理解您的问题,但我可以向您推荐this workflow,这对我们的团队非常有用。在this other post中,您将找到自动化脚本的脚本,但我发现最好在开始时运行完整的git命令,以使流程内部化。

此外,关于托管存储库和gitosis的this resource非常好。这个实用的链接,加上读一本关于git的书,对我们能够快速采用git非常有用。