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

How to continue project from specific commit and fix HEAD detached issue?

我检查了我项目中的特定提交并从那里继续,希望该提交之后的更改将被删除,并且我检查的那个提交将成为新的负责人。我提交了新的更改,但我无法推动它们。我还是 git 的新手。

我所做的是:

  1. git结帐commit_hash
  2. 已编辑项目
  3. git commit -m "new changes"
  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

我在 head commit 中更改了项目层次结构,所以我想恢复到以前的状态。我不想将它与 head 合并。

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

谢谢,米洛拉德·西米克

当我们签出提交哈希时,我们不再在分支 (detached HEAD) 上。

HEAD detached from 506f0ec

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

签出提交哈希。

$ git checkout <commit-hash>

您可以在此处执行 changes/commits 并稍后在推送到远程之前创建一个新分支(此处为您的情况)。但我更喜欢先创建一个新分支(比如 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

dev分支替换master分支

如果您想用 dev 分支的更改重置 master,请将 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有相同的commits/changes.

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

然后changes/commit。

干杯