gpt4 book ai didi

git - 如何让 git-push 永久跳过来自详分割支的提交?

转载 作者:行者123 更新时间:2023-12-04 08:30:17 24 4
gpt4 key购买 nike

对于一个存储库,我使用一个简单的脚本定期提交对文件的更改,以保留一份相当详细且非逻辑的历史记录,我想保留这些历史记录用于我自己的统计目的(即我知道 git rebase ,但这非逻辑历史是我想保留的东西)。目前我只是致力于一个单独的分支 autocommit并使用

git checkout master
git merge --squash autocommit
git commit
git checkout autocommit
git merge --ff-only master
为“正确” promise 保留 master保持分支整洁的同时保持与 autocommit 的关系-分支。所以我有一段历史,比如
| *   95e4189 Merge branch 'main' into autocommit
| |\
| |/
|/|
* | 040386a <= created via git merge --squash autocommit
| * 72bc5a5 autocommit
| * 9aaf5a6 autocommit
| * ea758c0 autocommit
| * 7ff1de8 autocommit
但我真正想要的是 git merge autocommit --edit进入 master正确链接到历史记录。但是,我不想 git push来自 autocommit 的任何内容分支(或任何带有所述消息的提交,如果这更易于管理)。但是我想这基本上会破坏推送的仓库,因为部分提交历史将无法访问。所以我的问题是:
  • 我怎么能这样做呢? IE。一种git push --skip autocommit
  • 我应该怎么做? Squash 提交版本似乎不是最佳的

  • 对于可视化,我目前有:
       A1 -> A2 -> A3--=> A3' -> A4 -> ...    [autocommit]
    / ↓' /
    M1-----------> M2 -----> ... [master]
    哪里 ↓'表示 git merge --squash这意味着 A3不是 M2 的父级但只有 M1是,和 A3'刚刚 merge 回来 M2以更好地跟踪连接。我想我想要的只是
    M1--------------=> M2 ---> ....                             [master]
    \ /
    A1 -> A2 -> A3 -> A4 (or maybe A3' first merging M2 back) [autocommit]
    但没有提交 A1等来自 autocommit分支被推。

    最佳答案

    要了解什么是可能的,了解一下 git 的工作原理会很有用。从根本上说,git 在层中建立了它的版本控制模型:

  • 一个内容寻址数据库,其中可以根据其内容的散列查找任意数据块。这些 blob 是不可变的,因为更改任何内容都会产生新的哈希值,因此永远不会更新现有项目。
  • 有向无环图,其中 blob 描述存储库的状态、一些元数据(日期、提交者、消息等)和零个或多个父项。父项由它们的不可变散列寻址,反过来又是为新提交散列的内容的一部分。
  • 指向特定提交的指针,为它们提供更用户友好的名称。我们称其中一些为“分支”,但它们只指向一个提交;从那里,git 可以沿着父引用向后走,以查找“在”该分支上的所有提交。

  • 由此,我们可以看到一些不可能的事情:
  • 让您的本地副本为一次提交记录两个父项,但 github 只显示同一个提交的一个父项 - 一组不同的父项会给出不同的哈希值,因此没有任何东西会将其识别为相同的提交。
  • 让 parent 双方都记录,但没有推送 autocommit 上的提交分支 - git 不知道它在历史中找到的 merge 中分支的名称,它只是将所有父提交视为它向后跟踪的历史的一部分。
  • 推送在一个分支上可访问的所有提交,除了那些可在另一分支上访问的提交。这仍然不是一个足够强大的定义,因为最终您将在创建 autocommit 之前到达历史记录中的提交。分支,再次 git 将不知道发生在历史中的哪个位置。
  • 即使您可以定义不想推送的提交列表,工具也不会很高兴找到对显然不存在的父提交的引用,并且可能会假设您的存储库已损坏。

  • 我真的只能想到两个选择:
  • 记录来自自动提交分支的正常 merge ,并使用历史记录中显示的自动提交。
  • 像现在一样压缩提交,但创建自己的工具来记录您压缩的自动提交,并允许您查找它们,确保没有遗漏等等
  • 关于git - 如何让 git-push 永久跳过来自详分割支的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65059268/

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