如何从特定提交继续项目并修复HEAD分离问题?

时间:2017-02-28 09:47:50

标签: git version-control head git-detached-head

我从我的项目中检查了特定的提交并继续从那里开始,希望删除该提交后的更改,并且我检查的提交将是新的头。我做出了新的改变,但我无法推动它们。我还是git的新手。

我所做的是:

  1. git checkout commit_hash
  2. 已编辑的项目
  3. git commit -m"新的更改"
  4. git push -u origin master
  5. 我得到了:

    To https://github.com/myusername/project.git
     ! [rejected]        master -> master (fetch first)
    error: failed to push some refs to 'https://github.com/miloradsimic/ISA16.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    

    当我输入 git status 时,我得到了:

    HEAD detached from 506f0ec
    nothing to commit, working directory clean
    

    我改变了头部提交中的项目层次结构,所以我希望将其恢复到以前的状态。我不想把它与头合并。

    我是这样做的(简单方法,不专业): 我在一个文件夹项目中有变化,没有定位在头上。 我将head commit下载到新文件夹中,并将所有文件(git文件除外)从我对这个文件夹的更改复制到文件夹中。删除了不必要的文件。添加了所有更改,提交和推送。

    谢谢,Milorad Simic

3 个答案:

答案 0 :(得分:3)

当我们结帐到提交哈希时,我们不再是分支detached HEAD)。

  

HEAD与506f0ec分离

要解决它,只需创建一个新分支,进行更改,执行新的提交,推送到远程。

签出提交哈希。

$ git checkout <commit-hash>

您可以在此处进行更改/提交,然后在推送到远程(此处为您的案例)之前创建新分支。但我更喜欢先创建一个新的分支(比如dev)。

$ git checkout -b dev
// do changes here

$ git add .
$ git commit -m 'message'
$ git push -u origin HEAD       # push to remote/dev

dev分支合并到master分支:

您需要merge dev branch进入master分支机构才能获得新的更改。

$ git checkout master
$ git pull origin dev      # pull 'dev' new changes into 'master', pull = fetch + merge

$ git push origin HEAD     # update origin/master

master分支替换为dev分支

如果您想使用master分支的更改重置dev,请将master替换为dev分支。

$ git checkout dev
$ git branch -D master      # delete local master branch

$ git checkout -b master    # create new local/master branch with exactly 'dev's' history
$ git push -f origin HEAD   # force(-f) push to remote since git history is changed

注意:现在masterdev具有相同的提交/更改。

答案 1 :(得分:0)

检查&#34; git status&#34;,如果您还有剩余的提交更改,请先通过&#34; git stash&#34;将其隐藏一段时间。

尝试使用&#34; git pull --rebase&#34;

之后尝试再次提交。 如果你再次遇到同样的问题,请告诉我。

答案 2 :(得分:0)

您可以执行git reset --hard <commit-id>

然后进行更改/提交。

干杯