31

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

4 回答 4

14

git stash是完全合法的,尽管正如格雷格所说,由于某种原因解决冲突可能会变得很奇怪。但是它们仍然是可修复的,您实际上不会有任何问题。我知道重新应用存储的命令是git stash apply,尽管pop可能是我不知道的替代方法(或者它可以做一些不同的事情,我不知道,所以你可能想使用apply。)

您是否有理由不想在合并之前提交这些更改?一般来说,这是正确的做法。

另一种选择是:

git stash
git checkout -b newwork
git stash apply
git commit ...

这将创建一个新分支,这将允许您在没有冲突的情况下让您的 master 保持最新(再次结帐 master,然后 pull 或 fetch + merge)。然后,您可以将您的分支与 (仍在 master 上) 合并回来 git merge newwork。您可以解决 master 上的冲突,同时仍保留 newwork 上的工作而没有任何冲突。如果你担心冲突真的把事情搞砸了,这会更安全一些,但一般来说,冲突只是过程的一部分,所以不要太担心它们。

于 2011-10-08T03:24:16.233 回答
6

在提取(合并)新代码之前始终提交任何本地更改是一个好习惯。如果您不提交,那么 Git 不知道您想如何管理本地更改。仅与干净的工作树合并。

由于本地和其他人更改了相同的文件,合并中可能存在冲突。以我的经验,从实际的合并操作中解决冲突比从stash pop操作中解决相同的冲突稍微简单一些。

于 2011-10-08T02:53:51.233 回答
4

我有另一个解决方案:

git reset --hard FETCH_HEAD

它几乎适用于任何情况。

于 2015-07-09T08:01:49.620 回答
0

首先你应该:

git checkout -- public_html/sites/file
git checkout -- public_html/sites/file1.txt
git checkout -- public_html/sites/file2.txt

下一步:

git pull origin master
于 2014-04-17T11:14:21.163 回答