git:分离头部和强制覆盖

时间:2015-11-18 00:12:47

标签: git branch commit

我通常在git上工作,但这一次它让我烦恼!我在某个分支上,自创建以来就允许说3次提交(即001002003)。因此,当我在003时,我检查了002并进行了一些更改,然后我提交到002现在我想用新提交覆盖我的分支,使其成为分支。

我试图推动,我得到了以下git push origin HEAD:<name-of-remote-branch>。所以我接着尝试git push origin HEAD:my-branch并被拒绝(甚至不确定这是否是我应该做的)。

关于如何解决它的任何想法?

3 个答案:

答案 0 :(得分:2)

也许您的推送被拒绝了,因为您已经将003推送到服务器存储库,并且您的本地分支在002之上进行了更改并移除了003(如果我理解正确的话)< / p>

您可以尝试使用--force选项git push强制推送并覆盖遥控器(如果那真的是你想要做什么)。即:

git push --force

如果您打算使用--force选项,如果您不确定自己在做什么,我建议您进行相应的备份......

答案 1 :(得分:0)

git push -f origin HEAD:<name-of-remote-branch>

将使用本地分支覆盖远程分支,将提示设置为当前分离的HEAD。

答案 2 :(得分:-1)

git clone之后的本地回购状态:

001----002----003 HEAD/master

当您签出002并进行了一些更改并提交时,状态为:

001----002----003 master
        \
         +----004 HEAD/detached branch

你想要的是:(a)

001----002------005----003 HEAD/master
        \      /
         +----004 detached branch

或者,这:(b)

   001----002----003----004 HEAD/master

在上述情况下,005将是合并提交。

我认为它不是(b)因为在这种情况下检查002没有意义。如果是(a)你必须:

  1. 来自独立分支的结账大师。
  2. 将分离的分支合并到master。
  3. 如果你改变,而不是在步骤2中合并,那么历史将是线性的,IMO,干净,如下:

       001----002----004----003 HEAD/master
    

    这会解决您的顾虑吗?