2013-10-17 190 views
0

在这里我的情况: 我们有2人在C项目上工作,我们使用bitbucket和git作为DVCS。 我们对这些系统真的很陌生,不太了解如何使用它。如果用户A提交了修改,并且用户B想要修改它,这里是他得到的(btw。用户B已经在使用一些不同的文件):Git合并冲突的文件时拉

$ git的拉原点主

错误:您当地的下列文件中的更改将被合并覆盖:

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

我不在乎覆盖两个第一文件,因为它们总是不同的,当我们编译了,我不在乎来取代它,但如果我们的第三个可能是巨大的可以合并它。

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

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

谢谢!

+0

为什么你甚至跟踪构建结果(即.exe文件)?我想我会建议删除那些跟踪 - 只跟踪你的源代码和其他东西,如足够重建其余的makefile。 – twalberg

回答

1

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

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

  4. 进行更改

  5. 阶段他们,他们承诺并推动他们

如果您不想拉取更改,则可以始终先执行fetch,然后再执行merge仅打算打印的文件。

我已经回答了上拉类似的问题取,合并这里希望它有助于:https://stackoverflow.com/a/19296457/981616

0

我的解决办法是:

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

以上两个命令将重置这些变化文件,那么我会:

git stash 

This c ommand是要暂时藏匿我的变化,那么我就可以这样做:

git pull origin master 

拉力假设去没有任何合并冲突,如果从用户B以前提交不会做任何冲突,那么你就可以回来与通过命令隐藏更改:

git stash pop 

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

0

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

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

之后,用户B可以拉没有问题

0

我看到这已经回答了,但我认为的一些提示可能是你的情况是有用的。

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

至于无视当地的变化,@乌代的答案几乎总结起来 - 你需要做一个git stash,然后做一个git pull origin master。然后一个git stash pop

尽管最后的git stash pop语句附有caveat,但在合并冲突的情况下,您需要显式删除隐藏的条目。