git commit用原始代码覆盖新的remotly推送的更改(分离的HEAD?)

时间:2010-10-20 09:01:10

标签: git commit

我想在我们公司使用的git设置有些麻烦。

我在git 1.5.4.3的ubuntu hardy机器上用主代码库建立了一个git“服务器”。 我是git的新手,并使用教程逐步设置此存储库。

git init
git add .
git commit -m "initial commit"

然后我用版本1.7.3.1.msysgit.0(官方git for windows)设置了一个客户端(Win XP)git install,并通过ssh克隆了该存储库。

git clone <IP>:/var/git/<repo> <target>
<made some file changes>
git status ob my client then says:

$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   searchfunc_admin.php
#
no changes added to commit (use "git add" and/or "git commit -a")

然后我做了一个提交-a,它给出了:

[master 9404d01] + searchfunc_admin.php DB Verb. Prüfung modifiziert
 1 files changed, 3 insertions(+), 3 deletions(-)

然后我推送到服务器上的存储库:

$ git push origin master
<user>@<IP>'s password:
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 385 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
To 192.168.1.26:/var/git/farocmsafs
   5267756..9404d01  master -> master

在ubuntu机器上,我cd到主仓库并检查发生了什么:

git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   searchfunc_admin.php
#

如果我检查DIFF,它会显示更改,但它们会作为旧代码处理,应使用原始代码(这是真正的旧代码)进行更新

git diff HEAD
diff --git a/searchfunc_admin.php b/searchfunc_admin.php
index 4e15696..17ca17a 100755
--- a/searchfunc_admin.php
+++ b/searchfunc_admin.php
@@ -9,11 +9,11 @@ require_once("additional/functions.php");
 // INITS
 //**********
 // Connect to database
-if(!$mylocal || !$myafs)
+if($DB_CONNECTION != TRUE)
 {
-       if(!sqldb_connect())
+       if(($sql_return = sqldb_connect()) != TRUE)
        {
-               echo "Cant connect to database";
+               echo "Cant connect to database: ".$sql_return;
                die(1);
        }
 }

如果我执行git commit,他会向我询问消息,提交,但不会应用新推送代码的更改。

我发现我应用新更改的唯一机会是git reset - 使用远程提交ID。但是这样我必须手动对代码应用所有更改。

我不使用其他分支,只使用“master”,并且不使用git commit与“-a”之外的任何其他参数,所以我没有任何线索,该错误的来源是。

从我到目前为止所读到的内容来看,这可能是一个独立的HEAD问题,但我不知道为什么头部是分离的。 如果我在ubuntu机器上进行了本地更改,一切顺利。我可以在提取或拉取后提交并查看远程计算机上的更改。但是我无法通过reset --hard来应用远程更改。

希望有人能帮助我。

最诚挚的问候,塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

不要推送到非裸存储库。它将更新头部而不是工作树,当您稍后查看它时会导致奇怪的行为。您可以通过执行git reset --hard将服务器上的工作树更新为当前头来修复它。

有两种方法可以解决这个问题:

  1. 使用git init --bare
  2. 在服务器上初始化新存储库
  3. 清除服务器上的工作树,并将.git子目录的全部内容移动到顶层。您应该重命名存储库,使其以.git结束,因为这是裸存储库的惯例。