Git基本工作流程

bsr*_*bsr 27 git push

可能重复:
git push错误'[remote rejected] master - > master(分支当前已检出)'

我是Git的新手,并尝试将其用于本地grails项目.
我遵循的步骤:

  1. 创建grails项目
  2. 转到项目目录并 git init
  3. 在暂存区域中添加项目中的所有文件并提交.
  4. 回购中的git状态给出了以下消息

    BXX@BXX-PC /c/Work/Grails/projects/yyy/tables (master)
    $ git status
    # On branch master
    nothing to commit (working directory clean)
    
    Run Code Online (Sandbox Code Playgroud)
  5. 尝试将其保留为主分支,通过克隆repo进行更改,然后再将更改推回.为了那个原因

  6. 在我的IDE中,签出项目(IntelliJ).这实际上将项目克隆到另一个目录.
  7. 进行更改并提交项目
  8. 将本地更改推送到master.

    15:41:56.249: git push -v origin master
    Pushing to c:/Work/Grails/projects/xxx/tables
    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 inconsistent        
    remote: error: with what you pushed, and will require 'git reset --hard' to match        
    remote: error: the work tree to HEAD. 
    
    Run Code Online (Sandbox Code Playgroud)

克隆的回购状态是

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

请帮助我理解这一点.是否有更好的工作流程可供遵循.我或许可以通过Intellij初始化repo,并尝试在主分支上工作.仍然不确定上面有什么问题.

谢谢.

mip*_*adi 45

问题是你正试图推动非裸机回购.非裸仓库是具有关联工作树的仓库(即,文件实际上已签出到磁盘).默认情况下,Git不会让你推送到非裸仓库; 推到非裸露的回购仅更新Git的内部数据结构,并不会改变工作树(磁盘上的文件),这意味着,如果你再回去给你推到了回购,并开始对文件的工作,你我将处理这些文件的旧版本.当然,当您尝试提交更改时,这会导致问题.

执行此操作的最佳方法是推送到存储库,这是通过在创建存储库--bare时将标志传递给Git而创建的存储库:

$ mkdir new_repo
$ cd new_repo
$ git --bare init
Run Code Online (Sandbox Code Playgroud)

当然,裸仓库不会检出任何文件,因此您无法实际使用它(您必须首先克隆它).

如果你仅仅使用一个Git回购当地发展(而不是共享或服务Git的回购),你不具备有远程回购推到; 您可以处理本地非裸仓库的单个副本.


Ser*_*sov 34

首先,您不需要克隆本地存储库.您可以使用分支在同一存储库中划分开发.

Git是一个分布式VCS,如果您之前有Subversion或CVS的经验,那么您需要改变主意.

Git非常敏捷,您可以使用不同的工作流程.团队工作更需要克隆存储库,而不是本地开发(IMHO).

分店是您的理想选择.

看到.让我们为您的存储库设置master分支,以获得生产就绪的代码.让我们为开发创建另一个分支:

$ git checkout -b development master
Run Code Online (Sandbox Code Playgroud)

现在您正在开发分支.

您可以为要开发的每个功能使用不同的分支.这非常简单,乐于助人.

让我们假设你想要实现一些新功能,你需要创建一个新的分支:

$ git checkout -b newfeature development
Run Code Online (Sandbox Code Playgroud)

现在您可以使用代码,添加文件,提交等等.

接下来,您需要新开发的功能合并开发分支:

$ git add .
$ git commit -m "My last changes for the new feature"
$ git checkout development
$ git merge newfeature
Run Code Online (Sandbox Code Playgroud)

现在,来自newfeature分支的新代码合并到开发分支中.

在将来的某个时候,当您确定开发分支中的代码获得某个里程碑时,您可以将所有更改从开发合并到分支.

这是一个非常基本的工作流程,它可以为许多分支机构提供帮助.

我现在为您提供建议:阅读更多关于git,分支,存储的信息(非常非常有助于快速修复).过了一段时间,你会从使用git中获得很大的努力.

祝好运.


Jas*_*tts 10

这是成功的git工作流程的最清晰,最全面的描述.它基本上涵盖了谢尔盖建议的内容,增加了一些非常丰富的图形.

一个成功的Git分支模型

作者还建议您在合并时包含--no-ff标记以记录您在历史记录中有特征分支的事实.