从基于团队的Git远程存储库中提取时,我收到以下消息:
"C:\Program Files (x86)\Git\bin\git.exe" pull --progress "origin" +refs/heads/master:refs/remotes/origin/master
Updating 71089d7..4c66e71
error: Your local changes to the following files would be overwritten by merge:
Source/Reporting/Common/Common.Dal.csproj
Please, commit your changes or stash them before you can merge.
Aborting
Done
Git中的哪个规则(或功能)确保我在工作目录中修改的文件 NOT 被覆盖覆盖?
换句话说,在什么情况下会被拉?或者......我需要做些什么来强制拉动来覆盖我刚刚修改过的文件?
答案 0 :(得分:8)
如果您修改了一个在远程存储库中也有修改但尚未提交的文件。
如果没有未提交的文件也在远程仓库中进行了修改。
这取决于你真正想要的东西:
您想强制拉动以覆盖文件
显然,如果你真的想要这个,你就不会关心你刚才所做的改变,也不介意删除它们。如果是这样,你只需:
git reset --hard
git pull
您需要更改和拉动
中的更改在我看来,处理这个问题的最简单方法是提交你的更改,然后做一个拉动。然后,如果存在合并冲突,请使用常用机制来解析合并(提示:配置difftool和mergetool,以便您可以使用GUI工具(如meld或diffmerge等)轻松解决冲突。只是做:
git add $the_affected_file
git commit
git pull
您希望这两项更改,但您尚未准备好提交
我个人认为你不应该做好准备。但是,有时你会发现部分破坏了你正在调试的代码并且你真的不想提交。在这种情况下,您可以暂时隐藏更改,然后在拉动后取消暂停:
git stash
git pull
git stash pop
如果在弹出后存在冲突,则以通常的方式解决它们。注意:如果您因为冲突而未准备好丢失隐藏的代码,则可能需要git stash apply
代替pop
。
答案 1 :(得分:4)
该消息表示您对文件进行了本地修改但未提交。运行pull
时,工作树中的文件将从远程存储库更新。如果git发现文件被您和已提交的文件修改并在远程存储库中,它将只是尝试合并更改并更新索引和工作树。但是对于只有本地修改的文件而且尚未提交,它将停止。
因此,您必须先根据commit
进行更改,或按照消息中的建议stash
进行更改。没有办法如何避免它,因为它会导致不一致的索引和工作树。
保持本地更改的典型方案是(如git help stash
中所示):
git pull # first attempt of pull
...
# Here you see the complains about locally modified files
git stash # will save your changes into stash
git pull # pull now succeeds as there are no locally modified files
git stash pop # pop the stash and apply the changes
答案 2 :(得分:2)
正如消息所示,您对文件进行了一些更改,但未将这些更改提交到存储库。其他人对同一个文件进行了更改,当您尝试从远程存储库中提取最新版本时,由于被其他更改覆盖,您将丢失对文件所做的任何本地更改。
如果要保留所做的更改,请在提取之前将更改提交到存储库,然后尝试合并:git merge origin/master
。如果您不关心这些更改,可以将其丢弃:git stash drop
。
<强>更新强>
回答关于在本地保留更改而不提交存储库的问题......
只要存放你所改变的所有东西,拉出所有新东西,然后弹出你的藏品,即
git stash
git pull
git stash pop
请注意,在stash pop中,在这种情况下会出现冲突(该消息已经非常清楚)。
如果你知道你想要的东西是你在藏匿处的东西,即你当地的变化,那么解决冲突很容易。你只需使用
git checkout --theirs -- Common.Dal.csproj