Git 重基不是';I don’我没有按预期工作,也许我应该尝试另一种方法
我想做的就是让我的主分支完全像我的开发分支一样 我试图合并我的开发分支的主控并重新设置其基础。两种解决方案都不起作用 我的开发分支有一个不同的目录结构,它被证明比我预期的更困难 我在上面的链接中尝试的rebase对测试分支有效,但对主分支无效。主服务器是最初提交的服务器,从那以后就没有更新过,所以它远远落后 尽管测试分支和主分支具有相同的目录结构。我不知道师父为什么不工作 在rebase期间,我收到一个错误,声明要在补丁文件中查找,但我不知道要查找什么 我在研究这个问题时遇到了一些问题,其中的问题是如何改变头部所在的分支 那么,我可以将HEAD更改为develope,然后删除master分支,然后从develope分支创建一个新分支吗Git 重基不是';I don’我没有按预期工作,也许我应该尝试另一种方法,git,merge,rebase,head,Git,Merge,Rebase,Head,我想做的就是让我的主分支完全像我的开发分支一样 我试图合并我的开发分支的主控并重新设置其基础。两种解决方案都不起作用 我的开发分支有一个不同的目录结构,它被证明比我预期的更困难 我在上面的链接中尝试的rebase对测试分支有效,但对主分支无效。主服务器是最初提交的服务器,从那以后就没有更新过,所以它远远落后 尽管测试分支和主分支具有相同的目录结构。我不知道师父为什么不工作 在rebase期间,我收到一个错误,声明要在补丁文件中查找,但我不知道要查找什么 我在研究这个问题时遇到了一些问题,其中的
在我的情况下,这似乎比尝试重新设置基础/合并要干净得多。我在评论中添加了一大堆内容,但为了回答提出的问题: 那么,我可以将HEAD更改为develope,然后删除master分支,然后从develope分支创建一个新分支吗 是的,你可以做到。事实上,您甚至不必这样做,您可以强制移动标签
主标签(即,不需要单独的“删除”步骤,请参见下面的第二部分)
存储库中的提交将通过此过程保持不变。例如,在执行此操作之前,您可以从以下内容开始:
HEAD
|
v
o--o--...--o--o <-- master
\
o--o--...--o <-- develop
如果随后删除名称master
,则会出现以下情况:
o--o--...--o--o [abandoned]
\
o--o--...--o <-- develop
^
|
HEAD
(此时,如果您愿意,您可以将头
指向主控
)
无需实际删除master
,只需将master
指向与develope
相同的提交即可。有两个命令可以做到这一点;使用哪一个取决于头部的内容
更明显的命令是:
git branch -f master develop
git reset --hard develop
这告诉Git更改master
,以便它现在指向develope
点所在的位置。也就是说,这告诉Git使用存储在名称develope
下的散列ID覆盖存储在名称master
下的散列ID
如果HEAD
当前指向master
,则命令为:
git branch -f master develop
git reset --hard develop
使用git reset
的原因是,如果HEAD
当前指向master
,则表示工作树(及其相应的索引)已设置为与master
指向的提交相匹配。如果您更改master
指向的提交,而不更改索引和工作树,Git的内部将不同步(这不是一个完全的灾难,但可能会非常混乱)。git reset--hard
的缺点是它会清除工作树中所有未提交的工作。这也是git reset--hard的优点。(如果这是你想要的,这是一个优势;如果不是,这是一个缺点。)
(请注意,如果您不在master
上,并且您git reset--hard develope
,那么您只需强制重新指向您所在的任何其他分支。也就是说,git reset
始终影响当前分支。)我在注释中添加了一些内容,但为了回答提出的问题:
那么,我可以将HEAD更改为develope,然后删除master分支,然后从develope分支创建一个新分支吗
是的,你可以做到。事实上,您甚至不必这样做,您可以强制移动标签主标签(即,不需要单独的“删除”步骤,请参见下面的第二部分)
存储库中的提交将通过此过程保持不变。例如,在执行此操作之前,您可以从以下内容开始:
HEAD
|
v
o--o--...--o--o <-- master
\
o--o--...--o <-- develop
如果随后删除名称master
,则会出现以下情况:
o--o--...--o--o [abandoned]
\
o--o--...--o <-- develop
^
|
HEAD
(此时,如果您愿意,您可以将头
指向主控
)
无需实际删除master
,只需将master
指向与develope
相同的提交即可。有两个命令可以做到这一点;使用哪一个取决于头部的内容
更明显的命令是:
git branch -f master develop
git reset --hard develop
这告诉Git更改master
,以便它现在指向develope
点所在的位置。也就是说,这告诉Git使用存储在名称develope
下的散列ID覆盖存储在名称master
下的散列ID
如果HEAD
当前指向master
,则命令为:
git branch -f master develop
git reset --hard develop
使用git reset
的原因是,如果HEAD
当前指向master
,则表示工作树(及其相应的索引)已设置为与master
指向的提交相匹配。如果您更改master
指向的提交,而不更改索引和工作树,Git的内部将不同步(这不是一个完全的灾难,但可能会非常混乱)。git reset--hard
的缺点是它会清除工作树中所有未提交的工作。这也是git reset--hard的优点。(如果这是你想要的,这是一个优势;如果不是,这是一个缺点。)
(请注意,如果您不在master
上,并且您git reset--hard develope
,那么您只需强制重新指向您所在的任何其他分支。也就是说,git reset
始终影响当前分支。)如果master
或develope
是其他分支的祖先,则无需重新设置基础;您只需`git checkout$OLDBRANCH;git重置——硬$NEWBRANCH`。但我不确定,因为我无法理解您的分支结构