我想做的就是让我的主分支与我的开发分支完全一样。
我试图将我的主人从我的开发分支合并并重新绑定。两种解决方案都不起作用。
我的开发分支有不同的目录结构,事实证明它比我预期的要困难。
我在上面的链接中尝试的rebase为测试分支工作,但不是主人。主人是最初的提交,因此没有更新,所以它远远落后。
虽然测试分支和主分支都具有相同的目录结构。我不知道为什么主人没有工作。
在rebase期间,我收到一条错误,说明要查看补丁文件,但我不知道要查找什么。
我正在研究这个问题,并遇到了一些线程,其中的问题是如何更改HEAD所在的分支。
那么,我可以将HEAD更改为开发,然后删除master分支并从develop分支创建一个新分支吗?
在我的情况下,这似乎比试图改变/合并要干净得多。
答案 0 :(得分:2)
我在评论中放了一堆东西,但回答提出的问题:
那么,我可以将HEAD更改为开发,然后删除master分支并从develop分支创建一个新分支吗?
是的,你可以做到这一点。事实上,您甚至不必这样做,您可以强行移动标签master
(即,不需要单独的“删除”步骤 - 请参阅下面的第二部分。)
此过程中存储库中的提交将完全不变。例如,在你这样做之前,你可能会开始使用:
HEAD
|
v
o--o--...--o--o <-- master
\
o--o--...--o <-- develop
在中间,当HEAD
指向develop
而不是master
时,您会得到:
o--o--...--o--o <-- master
\
o--o--...--o <-- develop
^
|
HEAD
如果您删除名称master
,则可以使用
o--o--...--o--o [abandoned]
\
o--o--...--o <-- develop
^
|
HEAD
如果您再添加master
作为指向与develop
相同的提交的另一个名称,则会得到:
o--o--...--o--o [abandoned]
\
o--o--...--o <-- develop, master
(此时,如果您愿意,可以将HEAD
指回master
。
如果不实际删除master
,您只需将master
指向与develop
相同的提交即可。有两个命令可以做到这一点;使用哪一个取决于HEAD
中的内容。
更明显的命令是:
git branch -f master develop
这告诉Git更改master
,以便它现在指向develop
点的任何位置。也就是说,这告诉Git使用名称master
下存储的哈希ID覆盖名称develop
下存储的哈希ID。
如果HEAD
当前指向 master
,则命令为:
git reset --hard develop
使用git reset
的原因是,如果HEAD
当前指向master
,则表示工作树(及其相应的索引)已设置为与提交匹配其中master
分。如果您更改 master
指向的提交,而不更改索引和工作树,Git的内部将不同步(不是完全灾难,但可能非常令人困惑)。 git reset --hard
的缺点是它消除了你在工作树中所做的任何未提交的工作。这也是git reset --hard
的优势。 (如果这是你想要的,这是一个优势;如果没有,这是一个缺点。)
(请注意,如果您master
上的不且您git reset --hard develop
,那么您只是强行重新指向您所在的其他分支 on。也就是说,git reset
总是影响当前分支。)