git合并导致丢失文件?

时间:2011-12-28 16:35:20

标签: git

假设我有两个分支

  1. 开发
  2. master我有类似

    的内容
    index.php
    lib/something.php
    lib/importantbugfix.php ( newer )
    

    develop我有类似

    的内容
    index.php
    lib/something.php
    lib/importantbugfix.php
    lib/config.php
    

    我希望master上的importantbugfix.php与develop上的合并,我们该怎么做?

    所以我有类似

    的东西 master

    中的

    index.php
    lib/something.php
    lib/importantbugfix.php ( newer )
    
    develop

    中的

    index.php
    lib/something.php
    lib/importantbugfix.php ( same newer )
    lib/config.php
    

    我正在阅读有关git merge的文档。而且我担心当我合并时它会像

    一样 master

    中的

    index.php
    lib/something.php
    
    develop

    中的

    index.php
    lib/something.php
    lib/importantbugfix.php ( newer )
    lib/config.php
    

    而不是上面。

2 个答案:

答案 0 :(得分:1)

不,合并不会取代;它结合了 - 因此得名。

有几种方法可以实现它。

最简单的是:

git checkout develop
git merge master

这将创建合并提交。它会将您在master上的更改合并到您开发的更改上。如果您在两个地方都更改了文件的相同部分,则会出现合并冲突,并且必须告诉git您要保留哪些更改。

另一种方式是:

git checkout develop
git rebase master

这将解除您在开发时所做的任何提交,因为它最后一次从master创建/与master合并,并且从那时开始用master上的所有较新提交更新它,基本上是“追赶”与master一起开发。然后,它将重播您在开发时提交的提交,这些提交来自master的现在更新的提交。实际上,它使您的开发分支看起来像今天从主人创建,然后您进行了特定于开发的更改。

这样的结果是一个更清晰的历史。需要注意的是,如果开发分支与其他人共享,并且上次分支/合并后的提交已经被共享,则不应该这样做。

答案 1 :(得分:0)

如果您的开发人员不了解他们正在做什么,那么Git合并可能会导致数据丢失。这发生在我昨天(两人)的队伍中。我们在Windows上使用Git Gui进行合并。

链接文章中的情景二深入解释了这种情况。如果你正在遭受这种痛苦,那么当你陷入痛苦的合并经历时,你会得到我的同情。

http://randyfay.com/content/avoiding-git-disasters-gory-story