从以前的提交中永久继续工作

时间:2017-08-17 05:03:52

标签: git

我检查了之前的提交,使用git checkout,我进行了更改并提交了它们。然而,当我做git状态时,它说HEAD脱离了。如何进行提交,我已经检查了我想要继续进行的提交?

3 个答案:

答案 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成为悬挂提交,迟早会被垃圾收集器删除。

但是如果你想做第二项任务(保留CD),步骤会有所不同:

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

然后删除本地分支并再次签出远程分支。你已经全部准备好了。