0

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

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

$ git pull 起源大师

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

  • bin/App.exe
  • bin/App.pdb
  • 应用程序.csproj

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

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

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

谢谢!

4

4 回答 4

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

于 2013-10-17T16:25:47.410 回答
0

我的解决方案是:

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

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

git stash 

该命令将暂时存储我的更改,然后我可以执行以下操作:

git pull origin master 

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

git stash pop 

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

于 2013-10-17T16:27:57.080 回答
0

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

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

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

于 2013-10-17T20:30:47.593 回答
0

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

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

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

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

于 2013-10-18T04:44:26.760 回答