拉动时Git合并冲突的文件

时间:2013-10-17 16:15:49

标签: git merge bitbucket

在这里我的情况: 我们有两个人正在从事C项目,我们使用bitbucket和git作为DVCS。 我们对这些系统真的很陌生,并且不太懂得如何使用它。

当我们都在处理它时,如果用户A提交更改,并且用户B想要进行修改,那么这就是他得到的(顺便说一句,用户B已经在处理一些不同的文件):

$ git pull origin master

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

  • 仓/ APP.EXE
  • 仓/ App.pdb
  • App.csproj

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

我们一直在互联网上搜索,只发现用户B应该重置它的回购..这是非常愚蠢的,因为他修改了文件,他将丢失。

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

谢谢!

4 个答案:

答案 0 :(得分:1)

您必须执行$ git stash之类的操作来隐藏更改,然后从远程存储库中提取更改,然后重叠您必须执行的更改$ git stash pop。执行此操作您将获得B已经提交的所有更改,一旦您在其上弹出更改,您将获得副本,您可以安全地提交并将更改推送到遥控器。

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

  4. 进行更改

  5. 暂存它们,提交它们并推送它们

  6. 如果您不想提取更改,可以先执行fetch,然后merge只执行您想要的文件。

    我已经回答了关于抓取,合并的类似问题,希望有帮助:https://stackoverflow.com/a/19296457/981616

答案 1 :(得分:0)

我的解决方案是:

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

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

git stash 

这个命令会暂时隐藏我的更改,然后我可以这样做:

git pull origin master 

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

git stash pop 

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我知道这已经得到了回答,但我认为在您的情况下,一些提示可能会有用。

  1. 不要在你的git仓库中包含* .exe。跟踪它们没有意义,如果你们其中一个人有不同的编译器版本,它们可能会改变。
  2. 将* .exe文件添加到.gitignore。在您的git repo根文件夹中,创建一个文件.gitignore(如果该文件尚不存在),并在其中添加*.exe表达式。
  3. 要删除已添加的*.exe文件,请使用git rm -r --cached '*.exe'
  4. 您应该为任何C编译的输出文件添加表达式*.o,为*.pdb添加另一个表达式。
  5. 至于忽略本地变化,@ uDay的答案几乎总结了 - 你需要做git stash,然后做git pull origin master。然后是git stash pop

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