代码之家  ›  专栏  ›  技术社区  ›  StevieD

创建一个新分支,并将提交后的头移动到新分支并与GitHub同步

  •  0
  • StevieD  · 技术社区  · 7 年前

    enter image description here

    我正试图从v0.03标记中分离出一个devel分支,并将pscott au分支从devel分支中分离出来。

    所以我做了:

    git checkout master (moved head back to tip)
    git branch devel
    git reset --hard 0060 (this is where the HEAD was in the picture at v0.03)
    git co devel
    git co master
    

    所以现在我有一个回购,看起来像这样:

    enter image description here

    我想移动pscott au,使它从devel分支出来。然后我想将这些更改同步到GitHub。我有点不知所措,因为我不知道我是否把第一部分搞砸了。

    2 回复  |  直到 7 年前
        1
  •  2
  •   torek    7 年前

    pscott-au 已经 分支 devel . 它也会分支 master

    事实上,分支名称只是充当提交的指针。提交是图中的圆。

    从不改变或移动;他们的关系从不改变或移动(您可以将它们绘制/拖动到不同的位置,但在这种情况下,它们的连接会随之拖动,因此即使绘制 不同的是,它代表相同的图形。)

    分支机构 姓名 另一方面,一直在移动。一个分支的名字只记得 一个特定的提交 ,Git称之为 . 提交可以是某一时刻分支的尖端,然后是分支的某个深处,或者在下一时刻根本不包含在分支中。那就是你移动名字时发生的事 主人 使它指向现在标记的提交 v0.03

    分支机构的名称是什么 refs/heads/ name ,但关键是 一个分支的名字是你可以运行的 git checkout name 然后运行以 git commit 新的 commita父连接返回到先前签出的提交的graphwhose上的新一轮节点;然后,在比赛结束时 过程中,Git调整 名称 所以它指向了你刚刚做出的新承诺!

    各种各样的 origin/* 其他 存储在GitHub上的Git存储库是本地Git最后一次调用GitHub Git。你从另一个Git用 git fetch 改变 git push ,如 git push flags origin name1 name2 ... . 如果你建议的改变是错误的,他们会服从你的要求 快进 操作。这个 flags 可以包括 --force --force-with-lease 如果要进行的更改是 快进。

    git push --force origin devel master . 这将向他们发送任何新的承诺,你有他们没有,所以这真的很快,然后命令他们设置自己的 德维尔 并命令他们设置 主人

    一旦你的Git知道他们的Git已经接受了这个新名字的创建并 主人 -改名,你的Git会加上 origin/devel 到你的远程跟踪名称,并移动你的 origin/master 去记住他们同意用来做生意的承诺 .

        2
  •  1
  •   Miral    7 年前

    你已经在上执行了硬重置 master 早于 origin/master (忽略) >origin/master ; 我不知道那是什么,但很奇怪)。

    总的来说,这是一个坏主意,因为它重写了历史,默认情况下会被拒绝。如果确实需要,您可以通过强制推送来覆盖它,但它可能会惹恼其他使用同一存储库的人。幸运的是,在这种特定的情况下,只要同时推动devel分支,提交就不会丢失(但如果不小心,在其他情况下也可能丢失)。

    要回答您的直接问题:要将pscott au分支上的两个附加提交移动到devel分支,可以执行以下顺序:

    git co pscott-au
    git rebase devel
    

    非常肯定

    git push origin devel
    git push -f origin master pscott-au
    
    推荐文章