【问题标题】:How to overwrite my branch with contents from my colleague's branch?如何用同事分支的内容覆盖我的分支?
【发布时间】:2012-06-27 18:36:03
【问题描述】:

我正在与我的同事一起使用 GIT 作为源代码存储库。 假设他在分支 chris 上工作,我在分支 mike 上工作。 有时,他将我的分支 mike 中的 部分 内容合并到他的分支 chris 中。 我不再对我的分支麦克风进行任何更改。 后来他做了更多的开发。

现在,我想保留我的分支的最新内容(作为 chris)。换句话说,我想用 chris 的内容覆盖 mike 中的所有内容。

我怎样才能做到这一点?

谢谢, 迈克

【问题讨论】:

    标签: git merge repository branch


    【解决方案1】:

    如果我对您的理解正确,那么您应该能够进行从 chris 到 mike 的快进合并。例如:

    git fetch --all
    git checkout mike
    git merge origin/chris
    

    另一方面,如果您想删除您的“mike”分支并将其替换为“chris”的副本,那么您可以这样做:

    git fetch --all
    git checkout master
    git branch -D mike
    git checkout -b mike origin/chris
    

    不过,在对存储库进行此类手术之前,请确保您有可靠的备份。恢复 tarball 或备份比展开复杂的合并更容易。

    【讨论】:

    • 很确定在最后一个命令中你的意思是git checkout -b mike origin/chris
    • 我选择了选项 2,这正是我所需要的。第 4 个命令将收到以下消息“致命:git checkout:更新路径与切换分支不兼容。您是否打算签出无法解析为提交的 'mike'?”你有什么想法?谢谢。迈克
    • @vergenzt 是的……我猜是睡眠不足。感谢您赶上换位!
    • @michael 我交换了分支名称; vergenzt 很友好地指出了这一点。继续尝试更新。
    【解决方案2】:

    就这么简单。

    1) 检查你的分支mike

    git checkout mike

    2) 合并你同事的分支chris

    git merge chris

    不会有任何冲突,因为您的同事已经合并了您的更改。

    【讨论】:

    • 这可能是最简单的解决方案了。
    • 是的,这应该是最简单的解决方案。然而,我刚刚发现,在他的分支'克里斯'下,有一些东西没有被他合并。当我尝试第二个命令时,它提出了合并...
    【解决方案3】:

    假设你在分支“mike”:

    git reset --hard chris

    【讨论】:

    • 他合并你的代码后你什么都没做,你可以这样做。
    • 这很聪明,因为它使用 refs/heads/chris 而不是显式的提交哈希。我认为这势必会让那些不完全了解 git 内部结构的人感到困惑——我更喜欢更冗长的语法,以便清楚 intent 是什么——但我要为简洁而表扬你语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2012-08-25
    • 2015-02-08
    相关资源
    最近更新 更多