我检查了之前的提交,使用git checkout,我进行了更改并提交了它们。然而,当我做git状态时,它说HEAD脱离了。如何进行提交,我已经检查了我想要继续进行的提交?
答案 0 :(得分:2)
让我们一步一步看看情况。最初你是一个分支机构的负责人,让我们说它是master
:
--A--B--C
^ master
HEAD
我使用git checkout检查了之前的提交
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
答案 1 :(得分:0)
重置为该提交。
git reset --hard <commit_id>
答案 2 :(得分:-1)
使用-f将其推送到遥控器,以便删除历史记录。
如果您的分支名为b1:
git push -f origin b1
然后删除本地分支并再次签出远程分支。你已经全部准备好了。