gpt4 book ai didi

Git - 将所有提交转移到另一个分支并创建一个新的主控

转载 作者:太空狗 更新时间:2023-10-29 14:48:25 26 4
gpt4 key购买 nike

(关于这个有很多类似的问题,我也阅读了各种文档,但我找不到任何可以回答这个具体问题的东西。)

给定一个没有远程和分支的仓库,在 master 上有 20 次提交。

目的是最终得到一个 master,所有提交都在 develop 上,但没有困惑的历史记录。

有区别吗:

git branch --move master develop
git checkout --orphan master

和:

git checkout -b develop 
git merge master
git checkout master
git reset --hard HEAD^20

?

第一个选项似乎是执行此操作的最简单方法,但我没有在任何地方看到它的建议 - 我一直在阅读的所有各种内容都倾向于使用第二个选项的变体(或 rebase ,我不认为适用于此)。

第一个选项是否符合我的预期?与第二个选项相比,它有什么优点/缺点吗?

是否有更好的替代方法来实现这一目标?

最佳答案

分支只是提交指针。当没有什么可指出的时候,你会进入一些奇怪的领域。老实说,如果你只是想获得一个“干净”的工作流历史,那么第一个重要的提交是从 develop merge 到 master,添加一个无关紧要的提交到master 首先:

git branch --move master develop
git checkout --orphan master
git rm -rf . ;# abandon the staged, orphaned changes
echo README > README ;# put something in this working directory
git add README && git commit -m "Initial commit of <my_project>"

为什么要做某事?因为一旦你运行了 --orphan checkout,你将无法对 master 分支做任何有意义的事情。自己试试:

$ git checkout --orphan master
Switched to a new branch 'master'
$ git checkout develop && git checkout master
error: pathspec 'master' did not match any file(s) known to git.

merge 怎么样?

$ git checkout --orphan master
Switched to a new branch 'master'
$ git merge develop
fatal: Non-fast-forward commit does not make sense into an empty head

没有骰子。解决这个问题的唯一真正方法是向那个空分支提交一些东西。在你这样做的那一刻,你可以以任何你喜欢的方式 merge develop:

$ git merge develop
Merge made by the 'recursive' strategy.
README | 1 +
1 file changed, 1 insertion(+)
create mode 100644 README

和日志:

$ git log --graph --oneline
* 867a1f9 Merge branch 'develop'
|\
| * 22df145 README
* 15ba82a Initial commit of test project

关于Git - 将所有提交转移到另一个分支并创建一个新的主控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com