git:分离磁头并强制覆盖

git:分离磁头并强制覆盖,git,branch,commit,Git,Branch,Commit,我通常在git周围工作,但这次它让我烦恼!我在某个分支上,该分支自创建以来(即001,002,003)有3次提交。因此,当我在003上时,我签出到002并进行了一些更改,然后提交到002,现在我想用新提交覆盖我的分支,使其成为分支的头 我试着推,得到了如下git推原点头:。因此,我随后尝试git推送originhead:my branch,但它被拒绝了(甚至不确定这是否是我应该做的) 关于如何解决这个问题有什么想法吗?也许您的推送被拒绝了,因为您已经将003推送到了服务器存储库,并且您的本地分支

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

我试着推,得到了如下
git推原点头:
。因此,我随后尝试
git推送originhead:my branch
,但它被拒绝了(甚至不确定这是否是我应该做的)


关于如何解决这个问题有什么想法吗?

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

您可以尝试使用
--force
选项对
git push
强制推送并覆盖遥控器(如果您确实想这样做的话)。即:

git push --force

如果您不确定自己在做什么,我建议您使用
--force
选项进行适当的备份…

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

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

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

001----002----003 master
        \
         +----004 HEAD/detached branch
你想要的是:(a)

或者,这个:(b)

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

我假设不是(b),因为在这种情况下,签出
002
的点没有意义。如果是(a),您必须:

  • 从分离的分支签出主节点
  • 将分离的分支合并到主分支
  • 如果您重新设置基础,而不是在步骤2中合并,那么历史将是线性的,而且,依我看,是干净的,如下所示:

       001----002----004----003 HEAD/master
    
    这能解决你的担忧吗

    git-push-f原点磁头:
    
    git push -f origin HEAD:<name-of-remote-branch>
    

    将用本地分支覆盖远程分支,将tip设置为当前分离的头。

    投票否决,甚至不发表评论!干得好,nawb!当您签出
    002
    时,它是否在新的分支机构上?我想不是。因此,
    HEAD
    处于分离状态。如果是,分支机构不知道它的远程回购(或来源),对吗?您希望通过新提交(我们称之为
    004
    )实现什么?@Bhaskar Yes!正如你所描述的那样。所以我想做的是把分离的头部设置为我检出的分支的头部。因此,最终的结果将类似于重置分支上上次提交的所有更改,即
    003
    (使
    002
    成为分支的负责人),进行一些更改,然后再次提交。是的,P想到了这一点,但不确定如果您希望更改远程上的现有历史记录,我是否应该
    强制
    ,这是最简单的方法。我会支持并尝试一下。将接受答案,如果它工作!刚刚使用了备份并在我的分支上再次提交。。。找不到别的办法
       001----002----004----003 HEAD/master
    
    git push -f origin HEAD:<name-of-remote-branch>