【问题标题】:Git - transferring all commits to another branch and creating a new masterGit - 将所有提交转移到另一个分支并创建一个新的主
【发布时间】:2012-08-22 16:08:19
【问题描述】:

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

给定一个没有远程和分支的存储库,在 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

?

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

第一个选项是否像我认为的那样做,与第二个选项相比,它有什么好处/缺点吗?

有没有更好的替代方法来实现这一点?

【问题讨论】:

  • 我认为您找到第二个序列的原因是 git checkout --orphangit 的一个相对较新的补充,部分是为了解决这样的场景。第二个序列部分有效(如 Blakes 回答中所述),但不足以实现目标。
  • 感谢您的信息 - 它确实足够新,我需要升级 Git,因为它只是在尝试这样做时说 error: unknown option 'orphan'。 :)

标签: git branch branching-strategy


【解决方案1】:

分支只是提交指针。当没有任何可指点时,你会进入一些奇怪的领域。老实说,如果您只是想获得一个“干净”的工作流程历史记录,那么第一个重要的提交是从 develop 合并到 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 结帐,您将无法对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.

合并怎么样?

$ 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

没有骰子。解决这个问题的唯一真正方法是向那个空分支提交一些东西,任何东西。在你这样做的那一刻,你可以任意合并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

【讨论】:

  • 感谢克里斯托弗,这一切都说得通。在 master 上进行一次新提交很好(并且与我的其他项目也更一致)。
【解决方案2】:

我看到的唯一问题是第二个版本不起作用。 HEAD^20 不会解析只有 20 次提交的历史记录,因此 git reset --hard HEAD^20 将失败。

您的初始版本应该可以正常工作。如果第二个版本有效,我看不出两者之间有显着差异。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 2018-03-12
    • 2018-08-12
    • 1970-01-01
    • 2014-11-19
    • 2011-05-06
    • 2014-03-06
    • 2022-01-11
    相关资源
    最近更新 更多