我签出了以前的提交,使用 git checkout ,我进行了更改并提交了它们。但是,当我做 git 状态时,它说 HEAD 已从 .如何提交我已经签出了我想要继续前进的提交?
让我们一步一步地看一下情况。最初你是一个分支的负责人,假设它是master
:
--A--B--C
^ master
HEAD
我使用 git 签出签出了以前的提交
git checkout HEAD~
现在你在这里:
--A--B--C
^ ^ master
HEAD
这种情况称为"分离的 HEAD",因为HEAD
(当前指针(不在任何分支的头部。
我进行了更改,并提交了更改。
现在你在这里:
--D < HEAD
/
--A--B--C
^ master
你现在想做什么?是否要将提交C
放在master
的头部,并将master
移动到HEAD
所在的位置(以D
(?还是要将提交D
移动到master
(保留C
(?
第一个任务可以使用以下命令解决:
git branch tmp-master # create a new branch
tmp-master
v
--D < HEAD
/
--A--B--C
^ master
git checkout master
tmp-master
v
--D
/
--A--B--C < HEAD
^ master
git reset --hard tmp-master # move the branch
git branch -D tmp-master # remove the temporary branch
master
v HEAD
--D
/
--A--B--C
或者,要简化新的master
分支:
--A--B--D
C
提交C
成为悬而未决的提交,迟早会被垃圾回收器删除。
但是如果你想做第二个任务(同时保留C
和D
(,步骤有点不同:
git branch tmp-master # create a new branch
tmp-master
v
--D < HEAD
/
--A--B--C
^ master
git checkout master
tmp-master
v
--D
/
--A--B--C < HEAD
^ master
git cherry-pick tmp-master
git branch -D tmp-master # remove the temporary branch
--A--B--C--D' < HEAD
^ master
只需重置为该提交。
git reset --hard <commit_id>
使用 -f 将其推送到远程,以便删除历史记录。
如果您的分支名为 b1:
git push -f origin b1
然后删除本地分支并再次签出远程分支。一切就绪。