【问题标题】:amending a commit to add a file, cause orphan branches修改提交以添加文件,导致孤立分支
【发布时间】:2020-10-26 20:25:01
【问题描述】:

基于以下git场景:

 C0 (master)
   \
    \
     C1-------------C5 (develop)
      \            /
       \          /
        C2--C3--C4 (feature)

我有一个新的未提交文件,我想将它作为提交 C0 的一部分添加到 master 中。所以我所做的就是checkout master然后修改以便将文件添加到C0中。

一切看起来都找到了,但我遇到的问题是 C0 哈希更改并导致 C1 丢失引用。

 C0 (master)


     C1-------------C5 (develop)
      \            /
       \          /
        C2--C3--C4 (feature)

我基本上是 git 新手,我确定我做错了什么。对于如何再次“链接”C0 和 C1,我将不胜感激。

可能是最佳实践,应该是在master中创建一个新的提交(C6),然后在develop中合并,但我想知道是否有办法为未来的情况解决此类问题,也许“修改”到当前提交是最好的选择。

【问题讨论】:

  • “修改”一个提交确实总是会产生一个 new 提交;现有的提交继续存在不变。如果旧提交 only 是某个分支中的最后一个提交(并且在某个其他分支中也不存在/可见),则它被替换为具有不同哈希 ID 的新改进提交不是很明显,除非你写下了所有的哈希 ID。但是,如果它以其他方式可见,那么无论使用旧提交的人仍在使用旧提交,现在您有两个可见的提交。

标签: git commit git-amend orphan


【解决方案1】:

假设至少一个分支masterdevelopfeature也被其他人使用,这种对git提交历史的重写应该避免,因为其他人的工作已经基于确切的提交共享历史记录(提交图)。

修改提交是历史重写操作。

为了完整起见,并且在所有这些分支都是本地存储库私有的情况下,在不丢失图形连接的情况下修改提交 C0 的方法是使用适当的 git 历史重写工具,例如git-filter-repo

使用git rebase -i 可以实现更简单的历史记录(更线性)重写

【讨论】:

    猜你喜欢
    • 2015-02-22
    • 1970-01-01
    • 2010-10-05
    • 2021-04-23
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多