在这里我的情况: 我们有两个人正在从事C项目,我们使用bitbucket和git作为DVCS。 我们对这些系统真的很陌生,并且不太懂得如何使用它。
当我们都在处理它时,如果用户A提交更改,并且用户B想要进行修改,那么这就是他得到的(顺便说一句,用户B已经在处理一些不同的文件):
$ git pull origin master
错误:合并后将覆盖对以下文件的本地更改:
我不在乎覆盖两个第一个文件,因为它们在编译时总是不同,我不在乎替换它,但如果我们可以合并它,第三个文件可能会很好。
我们一直在互联网上搜索,只发现用户B应该重置它的回购..这是非常愚蠢的,因为他修改了文件,他将丢失。
那么合并所有这些文件的解决方案是什么?
谢谢!
答案 0 :(得分:1)
您必须执行$ git stash
之类的操作来隐藏更改,然后从远程存储库中提取更改,然后重叠您必须执行的更改$ git stash pop
。执行此操作您将获得B已经提交的所有更改,一旦您在其上弹出更改,您将获得副本,您可以安全地提交并将更改推送到遥控器。
$ git stash
$ git pull origin master
$ git stash pop
进行更改
暂存它们,提交它们并推送它们
如果您不想提取更改,可以先执行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)
我知道这已经得到了回答,但我认为在您的情况下,一些提示可能会有用。
.gitignore
。在您的git repo根文件夹中,创建一个文件.gitignore
(如果该文件尚不存在),并在其中添加*.exe
表达式。*.exe
文件,请使用git rm -r --cached '*.exe'
*.o
,为*.pdb
添加另一个表达式。至于忽略本地变化,@ uDay的答案几乎总结了 - 你需要做git stash
,然后做git pull origin master
。然后是git stash pop
。
最后git stash pop
语句附加了caveat,如果发生合并冲突,您需要显式删除该条目。