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

Mil*_*mic 4 git version-control head git-detached-head

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

我所做的是:

  1. git checkout commit_hash
  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.
Run Code Online (Sandbox Code Playgroud)

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

HEAD 从 506f0ec 分离
无需提交,工作目录干净

我在头部提交中更改了项目层次结构,因此我想将其恢复到以前的状态。我不想将它与头部合并。

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

谢谢,米洛拉德·西米克

Saj*_*han 7

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

HEAD 从 506f0ec 分离

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

结帐到提交哈希。

$ git checkout <commit-hash>
Run Code Online (Sandbox Code Playgroud)

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

$ git checkout -b dev
// do changes here

$ git add .
$ git commit -m 'message'
$ git push -u origin HEAD       # push to remote/dev
Run Code Online (Sandbox Code Playgroud)

合并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
Run Code Online (Sandbox Code Playgroud)

master分支替换dev分支

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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