无法推入Git

无法推入Git,git,push,Git,Push,我详细地研究了其他类似的问题,最后提出了自己的问题 我开始学习Git,我尝试了一些非常简单的方法。我的目标是在本地机器上创建一个repo,将其克隆到本地机器上的一个文件夹中。对克隆中的文件进行更改。将更改推送到回购协议。以下是我所做的: 我创建了一个文件夹“test”,里面有“hi.txt” 我在“test”文件夹中运行了git init git添加。 git提交-m“完成” cd.. git克隆测试新测试 我能够看到一个新的测试克隆,里面有一个.git文件夹和从repo克隆的hi.txt 然后

我详细地研究了其他类似的问题,最后提出了自己的问题

我开始学习Git,我尝试了一些非常简单的方法。我的目标是在本地机器上创建一个repo,将其克隆到本地机器上的一个文件夹中。对克隆中的文件进行更改。将更改推送到回购协议。以下是我所做的:

  • 我创建了一个文件夹“test”,里面有“hi.txt”
  • 我在“test”文件夹中运行了
    git init
  • git添加。
  • git提交-m“完成”
  • cd..
  • git克隆测试新测试
  • 我能够看到一个新的测试克隆,里面有一个.git文件夹和从repo克隆的hi.txt

    然后,我对克隆中的hi.txt进行了更改,并运行了以下命令:

  • git添加。
  • git提交-m“完成”
  • 到目前为止还不错。现在,当我尝试将更改推送到repo“test”文件夹时,出现以下错误:

        $ git push
    Counting objects: 5, done.
    Writing objects: 100% (3/3), 248 bytes, done.
    Total 3 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    remote: error: refusing to update checked out branch: refs/heads/master
    remote: error: By default, updating the current branch in a non-bare repository
    remote: error: is denied, because it will make the index and work tree inconsist
    ent
    remote: error: with what you pushed, and will require 'git reset --hard' to matc
    h
    remote: error: the work tree to HEAD.
    remote: error:
    remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
    
    remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
    
    remote: error: its current branch; however, this is not recommended unless you
    remote: error: arranged to update its work tree to match what you pushed in some
    
    remote: error: other way.
    remote: error:
    remote: error: To squelch this message and still keep the default behaviour, set
    
    remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
    To c:/test
     ! [remote rejected] master -> master (branch is currently checked out)
    error: failed to push some refs to 'c:/test'
    
    那么我错在哪里呢?我误解了什么吗?非常感谢您的帮助。

    您创建的第一个“回购”作为工作副本,即非裸回购

    真正的回购协议,那些你可以推动的协议,没有有效的副本。它们只保存对所有分支中所有提交的引用

    将普通回购转换为裸回购

    mv .git ../  
    rm *
    mv ../.git .
    mv .git/* .
    rm -rf .git
    git config --bool core.bare true
    
  • 在文件资源管理器中打开repo
  • 确保您正在显示隐藏的文件(否则,您将看不到.git文件夹)
  • 删除除.git文件夹之外的所有内容
  • 将.git文件夹中的所有内容移动到根目录下
  • 删除空的.git文件夹
  • 执行git配置--bool core.bare true
  • 现在你可以推进你的裸回购

    编辑:使用问题中的步骤

    mkdir test
    cd test
    git init
    echo '0.0.1' > version.txt
    git commit -a -m "version file"
    
    现在你有了一个非裸回购协议

    让我们把它变成一个光秃秃的回购

    mv .git ../  
    rm *
    mv ../.git .
    mv .git/* .
    rm -rf .git
    git config --bool core.bare true
    
    现在你有了一个裸回购协议,它的内容是

    如果在某个时刻出现错误
    致命:此操作必须在工作树中运行

    现在,您可以像最初那样克隆它

    cd ..
    git clone test newTest
    touch index.html
    git commit index.html -m "index file"
    git push
    
    您创建的第一个“回购”作为工作副本,即非裸回购

    真正的回购协议,那些你可以推动的协议,没有有效的副本。它们只保存对所有分支中所有提交的引用

    将普通回购转换为裸回购

    mv .git ../  
    rm *
    mv ../.git .
    mv .git/* .
    rm -rf .git
    git config --bool core.bare true
    
  • 在文件资源管理器中打开repo
  • 确保您正在显示隐藏的文件(否则,您将看不到.git文件夹)
  • 删除除.git文件夹之外的所有内容
  • 将.git文件夹中的所有内容移动到根目录下
  • 删除空的.git文件夹
  • 执行git配置--bool core.bare true
  • 现在你可以推进你的裸回购

    编辑:使用问题中的步骤

    mkdir test
    cd test
    git init
    echo '0.0.1' > version.txt
    git commit -a -m "version file"
    
    现在你有了一个非裸回购协议

    让我们把它变成一个光秃秃的回购

    mv .git ../  
    rm *
    mv ../.git .
    mv .git/* .
    rm -rf .git
    git config --bool core.bare true
    
    现在你有了一个裸回购协议,它的内容是

    如果在某个时刻出现错误
    致命:此操作必须在工作树中运行

    现在,您可以像最初那样克隆它

    cd ..
    git clone test newTest
    touch index.html
    git commit index.html -m "index file"
    git push
    

    谢谢你的回答。如果我要删除我的repo中的所有文件,那么我的克隆如何获得这些文件?裸回购可以从文件开始吗?工作副本中的文件只是.git文件夹中引用的临时显示,这就是为什么可以在不丢失工作的情况下切换分支。裸回购协议没有这样的文件,但它仍然有重要的参考文献。它将它们放在根目录中,而不是放在.git文件夹中。很抱歉,我无法获得您以前的评论。事实上,如果没有一个简单的git工作示例,我很难掌握git的窍门。你能否修改我问题中的步骤,以达到问题中所述的目标?这将非常有帮助。你看到我更新的答案了吗?我希望这会有所帮助除非某个开发人员使用了
    push-f
    ,否则文件不会被覆盖,除非您非常确定要放弃其他人的提交,否则您不应该这样做。但是,当原点中存在分歧更改时,执行
    拉入操作将触发合并操作,如果存在冲突,请您解决。谢谢您的回答。如果我要删除我的repo中的所有文件,那么我的克隆如何获得这些文件?裸回购可以从文件开始吗?工作副本中的文件只是.git文件夹中引用的临时显示,这就是为什么可以在不丢失工作的情况下切换分支。裸回购协议没有这样的文件,但它仍然有重要的参考文献。它将它们放在根目录中,而不是放在.git文件夹中。很抱歉,我无法获得您以前的评论。事实上,如果没有一个简单的git工作示例,我很难掌握git的窍门。你能否修改我问题中的步骤,以达到问题中所述的目标?这将非常有帮助。你看到我更新的答案了吗?我希望这会有所帮助除非某个开发人员使用了
    push-f
    ,否则文件不会被覆盖,除非您非常确定要放弃其他人的提交,否则您不应该这样做。但是,当原点中存在分歧更改时,执行
    拉取
    ,将触发合并操作,如果存在冲突,请您解决冲突。