创建一个新分支并在移至新分支后移入提交并与GitHub同步

时间:2018-10-01 23:56:02

标签: git github

我不确定是否搞砸了。我有一个看起来像这样的本地存储库,头上有一个分离的头

enter image description here

我正在尝试从v0.03标签中分离出一个devel分支,并从devel分支中分离出pscott-au分支。

我做到了:

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,使它脱离倾斜。然后,我想将这些更改同步到GitHub。我对如何进行操作有些迷惑,因为我不确定是否将第一部分搞砸了。

2 个答案:

答案 0 :(得分:2)

无论价值多少,pscott-au 已经分支到devel。它还分支到master。好吧,因为它分支了任何东西,也就是说,根本没有。 :-)

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

承诺永远不会改变或动摇;他们的联系永远不会改变或移动。 (您可以在其中绘制它们/将它们拖到不同的位置,但是在这种情况下,它们的连接也会随之拖动,因此,即使外观不同,它也表示同一张图。) 另一方面,

分支名称一直在移动。分支名称只记住一个特定的提交,Git将其称为分支的提示。提交可以在某一时刻成为分支的尖端,然后在下一时刻位于分支的某个深处,或者根本不包含在分支中。这就是当您将名称master移回以使其指向现在也标记为v0.03的提交时发生的情况。

使分支名称​​成为的原因是……好吧,实际上,它的内部拼写是refs/heads/name,但是键 feature <分支名称的/ em>是,您可以运行git checkout name,然后运行以git commit结尾的各种操作。 commit命令进行一次 new 提交(图上的新圆形节点),其父连接返回到您之前签出的提交;然后,在git commit过程的最后,Git调整 name ,使其指向您刚刚进行的新提交!

各种origin/*名称是您本地的Git记忆在GitHub上存储在 other Git存储库中的分支名称的位置的方式,这是本地Git上次调用GitHub的位置吉特您可以使用git fetch从其他Git获得它们。您要求或告诉另一个Git使用git push来更改它们,就像git push flags origin name1 name2 ...一样。如果您建议的更改是快进操作,他们将服从请求。 flags 可以包含--force使其成为命令,而不是礼貌的请求(尽管他们仍然可以违背命令);如果您要进行的更改不是快进

,则必须使用该变量或某些变量(例如--force-with-lease)。

您要在此处进行的更改不是一项快进操作,因此您将需要运行git push --force origin devel master。这将向他们发送您没有的任何新提交(不是,因此非常快),然后命令他们将其devel设置为其中一个提交(即使请求也可以执行) ),并命令他们将master设置为另一个(如果您是该存储库的管理员或根据您告诉GitHub强制执行的任何规则进行了授权,他们将服从该命令。)

一旦您的Git知道他们的Git接受了此新名称创建和master-名称更改,您的Git就会将origin/devel添加到您的远程跟踪名称中,并移动您的{{ 1}}来记住他们同意用于其origin/master的提交。

答案 1 :(得分:1)

您已对master进行了一次硬重置,以将其移回origin/master之前(忽略>origin/master;我不知道那是什么,但这很奇怪)。

通常,这是一个坏主意,因为它会重写历史记录,并且默认情况下会被拒绝。您可以通过强制推送来覆盖它(如果确实有此意图),但是它可能会使使用同一存储库的其他任何人烦恼。幸运的是,在这种特定情况下,只要您还推动devel分支,提交实际上就不会丢失(但是,如果您不小心,在其他情况下也可能会丢失)。

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

git co pscott-au
git rebase devel

被视为历史重写,因此需要强制推送到Github。如果您非常确定是您想要的,则可以执行以下操作:

git push origin devel
git push -f origin master pscott-au