【问题标题】:Git merge conflicted files when pull拉取时Git合并冲突文件
【发布时间】:2013-10-17 16:15:48
【问题描述】:

这是我的情况: 我们是 2 个人从事 C 项目,我们使用 bitbucket 和 git 作为 DVCS。 我们对这些系统真的很陌生,并不真正知道如何很好地使用它。

当我们都在处理它时,如果用户 A 提交了更改,而用户 B 想要提取其修改,这就是他得到的结果(顺便说一句。用户 B 已经在处理一些不同的文件):

$ git pull origin master

错误:您对以下文件的本地更改将被合并覆盖:

  • bin/App.exe
  • bin/App.pdb
  • App.csproj

我不想覆盖前两个文件,因为它们在我们编译时总是不同的,我也不想替换它,但是如果我们可以合并它,第三个可能会很棒。

我们一直在互联网上搜索,只发现用户 B 应该重置它的 repo.. 这很愚蠢,因为他修改了上面的文件,他会丢失。

那么合并所有这些文件的解决方案是什么?

谢谢!

【问题讨论】:

  • 为什么还要跟踪构建结果(即 .exe 文件)?我想我会建议从跟踪中删除那些 - 只跟踪你的源代码和其他东西,比如足以重建其余部分的 makefile。

标签: git merge bitbucket


【解决方案1】:

您必须执行类似$ git stash 的操作来存储您的更改,然后从远程存储库中提取更改,然后重叠您必须执行的更改$ git stash pop。这样做,您将拥有 B 已经提交的所有更改,一旦您将更改放在上面,您将拥有您的副本,您将可以安全地提交更改并将更改推送到远程。

  1. $ git stash
  2. $ git pull origin master
  3. $ git stash pop

  4. 进行更改

  5. 展示它们,提交它们并推动它们

如果您不想拉取更改,您始终可以先执行fetch,然后再执行merge,只执行您想要的文件。

我已经回答了关于 pullfetch, merge 的类似问题,希望对您有所帮助:https://stackoverflow.com/a/19296457/981616

【讨论】:

    【解决方案2】:

    我的解决方案是:

    git checkout bin/App.exe
    git checkout bin/App.pdb
    

    以上两个命令将重置这些文件中的更改,然后我会:

    git stash 
    

    此命令将暂时存储我的更改,然后我可以这样做:

    git pull origin master 
    

    Pull 假设没有任何合并冲突,如果用户 B 之前的提交不会产生任何冲突,那么您可以通过命令返回隐藏的更改:

    git stash pop 
    

    如果发生合并冲突,您必须解决它们。

    【讨论】:

      【解决方案3】:

      另一种解决方案,一种更快,但不如存储优雅的解决方案是让用户 B 提交他的本地更改,以便能够从远程提取更改。

      git add -A
      git commit -m "Commit before pull"
      

      之后用户 B 可以毫无问题地拉动

      【讨论】:

        【解决方案4】:

        我看到这个问题已经得到解答,但我认为一些提示可能对您的情况有用。

        1. 不要在您的 git 存储库中包含 *.exe。跟踪它们是没有意义的,如果你们中的一个人有不同的编译器版本,它们可能会改变。
        2. 将 *.exe 文件添加到 .gitignore。在您的 git repo 根文件夹中,创建一个文件 .gitignore(如果它尚不存在),并在其中添加 *.exe 表达式。
        3. 要删除已添加的*.exe 文件,请使用git rm -r --cached '*.exe'
        4. 您应该为任何 C 编译的输出文件添加一个表达式 *.o,并为 *.pdb 添加另一个表达式。

        至于忽略本地更改,@uDay 的回答非常概括 - 你需要先做一个git stash,然后再做一个git pull origin master。然后是git stash pop

        最后一个git stash pop 语句附加了一个caveat,但如果发生合并冲突,您需要显式删除隐藏的条目。

        【讨论】:

          猜你喜欢
          • 2014-10-07
          • 2014-07-17
          • 1970-01-01
          • 1970-01-01
          • 2017-07-24
          • 1970-01-01
          • 2012-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多