已经在几个开发人员的本地计算机上克隆了一个Git存储库。对存储库中的代码进行了一些更改。我们现在收到错误:
error: Your local changes to the following files would be overwritten by merge:
public_html/sites/file
public_html/sites/file1.txt
public_html/sites/file2.txt
Please, commit your changes or stash them before you can merge.
Aborting
我在线阅读了不少帖子,并提出了几种不同的选择。运行了一种方法:
git stash
git pull
git stash pop
我想我理解了藏匿的基本原则。我的问题是,这是一个很好的解决方案,我可以使用这种方法遇到任何问题吗?我对Web开发有一个合理的理解,但我是一个相当基本的Git用户,并且在这一点上没有很多能力让自己摆脱困境。
答案 0 :(得分:15)
git stash
是完全合法的,尽管格雷格说,出于某种原因,解决冲突可能会变得奇怪。但它们仍然是可以修复的,你实际上不会满足于任何东西。我知道重新应用存储的命令是git stash apply
,尽管pop
可能是我不知道的替代方案(或者它可以做一些不同的事情,我不知道,所以你可能想用apply
。)
您是否有理由不想在合并之前提交这些更改?一般来说,这是正确的做法。
另一种选择是:
git stash
git checkout -b newwork
git stash apply
git commit ...
这会创建一个新的分支,这将允许您使主人更新而不会发生冲突,(再次检查主人,然后拉或取+合并)。然后,您可以将您的分支与({仍然在主人)git merge newwork
合并。您可以解决master上的冲突,同时仍然保留新工作的工作而不会发生任何冲突。如果你担心冲突真的搞砸了,这会更安全一些,但一般来说,冲突只是过程的一部分,所以不要过于担心它们。
答案 1 :(得分:6)
在拉动(合并)新代码之前,始终提交任何本地更改是一种很好的做法。如果您不提交,那么Git不知道您希望如何管理本地更改。仅与干净的工作树合并。
合并中可能存在冲突,因为本地和其他人更改了相同的文件。根据我的经验,解决实际 merge 操作中的冲突比解决 stash pop 操作中的相同冲突要简单得多。
答案 2 :(得分:3)
我有另一个解决方案:
git reset --hard FETCH_HEAD
几乎可以使用。
答案 3 :(得分:1)
首先你应该:
git checkout -- public_html/sites/file
git checkout -- public_html/sites/file1.txt
git checkout -- public_html/sites/file2.txt
下一步:
git pull origin master