【问题标题】:Duplicate a branch with no history复制没有历史记录的分支
【发布时间】:2020-11-20 15:24:26
【问题描述】:

我在恢复合并时犯了一个错误,现在当我尝试重新合并时,git 说一切都是最新的,因为恢复了合并。有没有办法复制一个分支,但绝对没有提交历史?这样,我可以重新合并,而不必担心“一切都是最新的”?谢谢

【问题讨论】:

  • 会重新设置分支的基础——以便每个提交都获得一个新的提交哈希——帮助?
  • @knittl,我确实尝试过变基,但是有很多更改,并且在多次提交中更改了一些文件,我认为如果我能以某种方式复制它会更容易,并且然后使用合并直接比较更改。另一种选择是直接比较分支的当前状态,然后以这种方式解决冲突。我猜这基本上只是一个合并?我不是唯一一个在做这件事的人,所以很多东西我不知道以前的提交需要/不需要什么
  • 从技术上讲,您实际上并不想要 no 历史记录:相反,您想要的是 不同 历史记录。但通常还原还原更容易。另请参阅Re-doing a reverted merge in Git

标签: git github merge branch


【解决方案1】:

您提交的更改已经被合并,这就是 Git 说“已经是最新的”的原因。还原会在此基础上产生新的变化。如果您需要再次合并这些提交,则需要从它们中创建 不同 提交。一个简单的解决方案是强制分支变基,这样每次提交都会获得一个新的提交哈希。

$ git checkout your_branch
$ git rebase -f merge_base
$ git checkout target_branch
$ git merge your_branch

merge_base 是您的分支开始的提交,换句话说,您的分支和目标分支之间共享的第一个提交

【讨论】:

  • 我认为这会奏效。这是有道理的,我认为这正是我想要做的。我最终打开了两个分支以在 VScode 的 git lense 扩展中进行比较,并手动复制更改。 2 小时后,可能差不多到一半了,哈哈
  • merge_branch 提交,我会在那里输入什么?与提交关联的随机数?
  • @kavy8:是的,那会起作用。根据您的 git 历史记录的复杂程度,$(git merge-base your_branch target_branch) 会计算出正确的值
猜你喜欢
  • 2015-06-04
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多