【问题标题】:Replace branch completely with another branch用另一个分支完全替换分支
【发布时间】:2021-08-30 17:15:42
【问题描述】:

我有 3 个分支:developmentqastaging。我在developmentqa 中的代码几乎相同,因此从developmentqa 进行公关不会产生太多更改(和/或冲突)。

但现在我将所有内容从qa 移动到staging。而qa 代码实际上与staging 完全不同而且是全新的,那么最好的选择是什么?我搜索并看到了这个:

git checkout qa
git merge -s ours staging
git checkout staging
git merge qa

这对我的情况来说是个好主意吗?提前致谢!

编辑:我不想丢失暂存分支的所有提交。

【问题讨论】:

  • 由于 qa 和 staging 包含不同的代码更改,您可能会遇到冲突。所以你需要解决并合并它们
  • 是的,我要做的就是将staging中的所有代码替换为qa中的代码,并且不想解决冲突,只需像手动逐个文件更改一样替换代码来自 qa 分支文件的代码
  • 你可以使用 git merge 强制覆盖,类似的步骤可以看这个链接stackoverflow.com/questions/40517129/…
  • 您的要求不明确。请提供提交的具体示例,当前状态以及您最终想要的内容。您也可以尝试这些命令,看看会发生什么。 Git 不会丢失任何东西。
  • 是的,在这里使用merge -s ours 是您的最佳选择。您最终将只获得一个分支的快照,但保留两个分支的历史记录。另请参阅stackoverflow.com/q/4624357/112968 以了解可能的重复

标签: git


【解决方案1】:

Gaël J'sanswer 很好,但是有一个更短的(即单个)命令,它不需要你切换分支,也不会干扰你当前的工作树:

git branch -f staging origin/qa

如果分支已经与其他人共享(= 推送),您必须强制推送到远程存储库并通知其他人他们必须基于此分支重新调整任何现有工作。

如果您想将所有暂存提交放在远程跟踪分支 origin/qa 的顶部,请使用 rebase

git rebase origin/qa staging

或者,如果您想替换staging 引用的树的内容,但仍保留其旧历史,请使用合并策略-s ours。请参阅my answer 上的“我如何在 Git 的另一个分支上‘覆盖’而不是‘合并’一个分支?”

【讨论】:

    【解决方案2】:

    如果你想“完全替换”,我会选择git reset

    git checkout staging
    git reset origin/qa --hard
    

    这将使stagingqa 具有完全相同的内容但是这将“擦除”可能已经在staging 上完成的提交(这些提交不会被删除但它们将不再出现在staging 的历史记录中)。

    【讨论】:

    • 有什么办法可以做到这一点,但又不会丢失暂存提交?
    • 不会丢失提交您的意思是在历史记录中看到它们,但仍然使用来自 qa 的内容覆盖所有文件?
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 2019-07-28
    • 2021-12-12
    • 2022-12-18
    • 2012-03-01
    • 2017-12-08
    • 2011-06-13
    相关资源
    最近更新 更多