解决Git合并冲突

时间:2011-10-08 02:49:06

标签: git git-stash

已经在几个开发人员的本地计算机上克隆了一个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用户,并且在这一点上没有很多能力让自己摆脱困境。

4 个答案:

答案 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