如何从特定的提交继续项目并解决“HEAD detached”问题?

5
我从我的项目中检出了特定的提交,并从那里继续工作,希望在该提交之后的更改会被删除,并且我检出的提交将成为新的头。我提交了新的更改,但我无法推送它们。我对git还很陌生。
我所做的是:
1. git checkout 提交哈希值 2. 编辑项目 3. git commit -m "新更改" 4. git push -u origin master 我收到了:
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
我在头提交时更改了项目层次结构,所以我想将其恢复到以前的状态。我不想与头部合并。 我这样做(简单易行,但不是专业的方法): 我在一个文件夹中有一个带有更改的项目,未定位在头部。 我下载了头提交到新文件夹中,并将所有文件(除git文件外)从具有更改的文件夹复制到此文件夹中。去掉不必要的文件。添加所有更改、提交并推送。
谢谢,Milorad Simic
2个回答

8

当我们切换到一个提交哈希时,我们不再处于分支上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分支:

你需要将dev分支合并到master分支以获取你的新更改。

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

$ git push origin HEAD     # update origin/master

使用dev分支替换master分支

如果你想用dev分支的更改来重置master分支,那么请使用dev分支替换master分支。

$ 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具有相同的提交/更改。


我创建了一个新的分支,但现在我有两个分支,master和dev。 最终结果是,我可以只有来自当前dev的数据的master分支吗? - Milorad Simic
可以的。我猜master是你的默认分支,所以不要删除default分支。现在你想用dev分支替换你的master分支吗? - Sajib Khan
我有一些我想从主分支中删除的文件。我可以再次进入主分支头部,在下一次提交时移除我不需要的远程文件吗? - Milorad Simic
可以的。执行以下命令:git checkout master,删除文件,git commit -am 'Delete unnecessary files'git push origin HEAD - Sajib Khan
但这不会应用我的新更改。如果我应用你的命令,我就没有我的最新更改了。但是,如果我将位置放在主头上,在下一个提交中清除不必要的文件,将我的更改(文件)硬拷贝到该存储库中并再次提交,它将实现我想要的效果。但这不应该这样做。 - Milorad Simic
1
你需要将dev分支合并到master分支以获取你的新更改。更新的答案。 - Sajib Khan

-1

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

然后进行你的更改/提交。

祝好


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接