Git告诉我拉,然后提交,然后拉?

时间:2011-07-20 23:16:19

标签: git github

我正在尝试推送新的更改,但我有一个冲突的文件。尝试推送后,我收到以下错误:

Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

好的,所以我们需要使用git pull。 我尝试使用git pull,然后我收到此错误:

error: Your local changes to the following files would be overwritten by merge:
    db/profile_edit.php
Please, commit your changes or stash them before you can merge.

但是,当我尝试提交时,我会回到第一个错误。我该怎么办?远程仓库的更改比我本地计算机上的更新。那么,我如何使用diff工具打开它并进行更改,然后告诉git我已经进行了更改,以便让我推动更改?

3 个答案:

答案 0 :(得分:23)

尝试

$ git pull --rebase

在您的之前提取远程更改,然后提交。看看它是否有效。

如果这不起作用,请尝试改为:

$ git stash
$ git pull --rebase
$ git stash pop

要在stash上保存更改,请在工作存储库中应用远程提交,然后再次将更改(保存到stash)应用到工作存储库中。

答案 1 :(得分:8)

首先,我想如果您要git add然后git commit,那么您的本地仓库将足够干净,可以git pull

但是,如果在您看到上游发生的情况之前您可能不想提交更改,则可以使用git stash。它将临时清理您的工作目录并保存您的更改,以便您可以拉(我建议git pull --rebase以避免合并点 - 但这是个人品味问题)。一旦您完成了上游更改,您就可以使用git stash pop恢复本地修改。在清理冲突并消除不必要的更改后,您可以添加,提交,然后最终推送。

答案 2 :(得分:5)

你对这些命令感到困惑。

git commit将更改保存到git的数据库中 git pull将远程提交带入您的仓库

您尝试使用未提交的更改,因此git要求您先提交(或git stash他们),以便它可以将您的本地更改与远程更改合并。