如果合并或重新定位,则主删除分支文件中的 Git `revert`

Posted

技术标签:

【中文标题】如果合并或重新定位,则主删除分支文件中的 Git `revert`【英文标题】:Git `revert` in master deleting branch files if merged or rebased 【发布时间】:2014-09-14 14:37:49 【问题描述】:

我使用 revert 做了一些非常愚蠢的事情,我不知道如何正确修复它。 我会尽量解释清楚。

我想在项目存储库中添加foobarbaz。 由于某些原因(因为我是白痴),我做了以下混乱 (其中“-xxx_commit”是“+xxx-commit”的 git-revert):

foo_branch
    +foo_commit 1

bar_branch
    +foo_commit 1
    +bar_commit 2
    -foo_commit 3

baz_branch
    +foo_commit 1
    +bar_commit 2
    -foo_commit 3
    -bar_commit 4
    +baz_commit 5

然后,foo_branchbaz_branch 已经合并到上游仓库中... 因此:

upstream/master
    +foo_commit 1
    +foo_commit 1
    +bar_commit 2
    -foo_commit 3
    -bar_commit 4
    +baz_commit 5

所以现在,foo 已被添加,然后被删除,我无法将 upstream/masterbar_branch 合并或变基,因为它会自行恢复...

你有什么办法来清理那个烂摊子吗? 有git-idiot 命令之类的吗?

【问题讨论】:

【参考方案1】:

在主节点 -foo_commit 3 和 -bar_commit 4(foo 和 bar 的还原)中恢复 foo 和 bar 怎么样?你应该在你的 repo 中以 foo、baz 和 bar 结尾。 这里是情况的一个例子(如果我没记错的话):

ghislain@debian: /tmp/git-test (master) > 混帐历史 * a3ca029 (HEAD, master) - 合并分支 'baz_branch' (2 秒前) |\ | * db33181 (baz_branch) - baz_commit (17 秒前) | * 618b704 - 恢复“bar_commit”(32 秒前) | * 672b77c (bar_branch) - 恢复“foo commit”(51 秒前) | * 06230db - bar_commit(62 秒前) * | 90ba017 - 合并分支“foo_branch”(7 秒前) |\ \ | |/ | * 60ea014 (foo_branch) - foo 提交 (79 秒前) |/ * 0b863fe - 初始(4 分钟前) ghislain@debian: /tmp/git-test (master) > git 合并 --no-ff bar_branch 已经是最新的了。 ghislain@debian: /tmp/git-test (master) > ll 共 0 -rw-r--r-- 1 ghislain 保险丝 0 Jul 23 15:18 baz -rw-r--r-- 1 ghislain fuse 0 Jul 23 15:14 自述文件 ghislain@debian: /tmp/git-test (master) > 混帐还原 672b77c 618b704 [master 88af7cd] 还原“还原“foo commit”” 1 个文件已更改,0 次插入 (+),0 次删除 (-) 创建模式 100644 foo :[master d2cf0a3] Revert "Revert "bar_commit"" 1 个文件已更改,0 次插入 (+),0 次删除 (-) 创建模式 100644 bar ghislain@debian: /tmp/git-test (master) > ll 共 0 -rw-r--r-- 1 ghislain 保险丝 0 Jul 23 16:37 bar -rw-r--r-- 1 ghislain 保险丝 0 Jul 23 15:18 baz -rw-r--r-- 1 ghislain fuse 0 Jul 23 16:37 foo -rw-r--r-- 1 ghislain fuse 0 Jul 23 15:14 自述文件

【讨论】:

这大概是我最终所做的。我想知道是否有比“revert of revert”更干净的东西。感谢您抽出宝贵时间制作这个出色的示例。

以上是关于如果合并或重新定位,则主删除分支文件中的 Git `revert`的主要内容,如果未能解决你的问题,请参考以下文章

git merge:删除我想保留的文件!

在 git 中如何将 Feature 分支合并到 Main 分支然后重新同步

git 合并两个分支的某个文件

git 合并两个远程分支

git删除分支

究竟是什么导致了git中的合并冲突?