RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 708667
Accepted
user264304
user264304
Asked:2020-08-21 21:42:21 +0000 UTC2020-08-21 21:42:21 +0000 UTC 2020-08-21 21:42:21 +0000 UTC

如何使另一个存储库成为当前存储库的分支?

  • 772

混帐。 如何使另一个存储库成为当前存储库的分支?

如何使另一个存储库成为当前存储库的分支?

git
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    user181100
    2020-08-22T04:56:55Z2020-08-22T04:56:55Z

    首先,您需要在某个地方同时从两个存储库中提取提交,因为您希望获得两个历史记录的组合。按照您的图纸,我们将使用数字提交在存储库中工作,并将第二个连接到它:

    • 在名称下添加一个带有提交字母的存储库作为“远程源”(remote)letters(您自己可以选择其他内容,没关系):

      git remote add letters путь/к/другому/репозиторию
      
    • 从那里拖动提交/分支/标签/任何东西:

      git fetch letters
      
    • 从第二个存储库的分支base开始创建并更改为新分支:master

      git checkout -b base letters/master # Ветки ж master в обеих?
      
    • master 打开当前仓库的分支历史,找到你想要分支的提交:

      git log master
      

      假设它的哈希以abcdef.

    • 这些都是准备工作。现在咒语:

      git rebase --root --onto abcdef
      
      • 重新链接提交 ( rebase)...
      • ...从电流到基准 ( --root)...
      • ...到带有哈希abcdef( --onto abcdef) 的提交。

    结果,我们有:

    [1 ]---[2 ]---[3 ]---[4 ]---[5 ]  (master)
               \
                \
                 \[А']---[Б']---[В']---[Г'] (base)
    

    一切都和图片一样。除了...文字提交哈希。改变它们的分支也会改变它们的哈希值。这就是为什么它们用破折号标记的原因,因为这些不是 100% 的原始提交。除了祖先(如果您没有遇到冲突),他们将拥有相同的一切。


    PS:我绝对不明白为什么这两个故事需要在基础上联系起来,尽管你可能知道得更好。Git 可以在同一个存储库中处理不相关的分支。

    当对 github 上关闭的仓库数量进行计费时,有些人通过在一个仓库中收集多个项目的分支来节省资金。它奏效了。对于那些同时需要多个项目的人,在新的 Git(2.5+?)的帮助下,可以使用git worktree add. 就这样。

    • 12
  2. 0andriy
    2020-08-23T03:01:25Z2020-08-23T03:01:25Z

    (我从评论中删除)

    正如尼克沃林金正确指出的那样,在您的版本中,没有解决方案。您需要选择a)一个公共基础,然后A-G的更改将分别转到A'-G',或者b)保存更改,然后分支将按照您自己“从上方”注意到的方式连接。

    我选择选项b)作为优先事项,原因如下:

    • 变化保持不变;
    • 您可以继续开发旧项目并在必要时“注入”新项目;
    • rebase,因此为简洁起见,我们将调用选项a),对于已发布的存储库来说通常是不好的做法(这里该术语的严重性取决于您)。

    现在说到重点。选项b)或merge在三个命令中完成:

    git checkout -b <имя новой ветки> <хеш комита №2>
    git fetch <URL репозитория №2> <имя ветки в репозитории №2>
    git merge --allow-unrelated-histories FETCH_HEAD 
    

    在执行之前,您需要确保您位于存储库 #1 的正确分支中。

    第三行有一个特殊的选项来避免错误:fatal: refusing to merge unrelated histories ,这里有更详细的描述。

    如果在第三阶段发生冲突,则必须以您认为合适的方式自行解决。

    结果将是<имя новой ветки>存储库 #1 中的一个分支。

    • 5
  3. aleksandr barakin
    2020-08-22T00:23:07Z2020-08-22T00:23:07Z

    当然,有很多解决方案。例如,您可以使用format-patch命令及其对am。

    例子。

    在目录中,0我们有一个具有以下历史记录的存储库:

    $ git log --one-line
    a3d5387 5
    2b7f19f 4
    e1d8018 3
    3e1fa25 2
    7e8bd8d 1
    

    并在目录中1- 用这个:

    $ git log --one-line
    5ea5e2c d
    d42991a c
    f980223 b
    cff9df9 a
    

    我们希望a b c d来自第二个存储库的提交“附加”到2来自第一个存储库的提交。

    首先,您需要将所有提交作为补丁文件获取:

    $ cd /путь/к/хранилищу/1
    $ git format-patch --stdout --root cff9df9 > patch
    $ git format-patch --stdout cff9df9..HEAD >> patch
    

    需要两个命令patch才能将“root”提交到文件中a

    其次,使用am存储库中的命令应用它们0,在那里创建一个新分支后,从提交分支2:

    $ cd /путь/к/хранилищу/0
    $ git checkout -b new 3e1fa25
    $ git am /путь/к/хранилищу/1/patch
    Applying: a
    Applying: b
    Applying: c
    Applying: d
    

    如果没有冲突,存储0将如下所示:

    $ git log --oneline --all --decorate --graph 
    * 20b6b2f (HEAD -> new) d
    * 8dedddf c
    * 6ddec5e b
    * cb7a798 a
    | * a3d5387 (master) 5
    | * 2b7f19f 4
    | * e1d8018 3
    |/  
    * 3e1fa25 2
    * 7e8bd8d 1
    

    当然,对于“附加”提交,哈希和已经变得不同,但其他一切——内容、日期、作者——都已经到位。

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5