2011-07-20 28 views
10

私は新しい変更をプッシュしようとしていますが、競合するファイルがあります。プッシュしようとすると、次のエラーが表示されます。Gitは私を引き出して、コミットしてから引っ張るように指示しますか?

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に伝えれば、私は変更をプッシュできますか?

答えて

23

はあなたの前に、リモートの変更を引き出し、次にコミットするには

$ git pull --rebase 

を行うようにしてください。それが動作するかどうかを確認してください。

これが動作しない場合は、代わりにこれを試してみてください。

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

を、stashに変更内容を保存作業、リポジトリ内のリモートコミットを適用し、(stashに保存)して変更を適用するには、あなたの内側再度作業用リポジトリを作成します。

8

最初にgit addにしてgit commitにすると、ローカルレポがgit pullになるほど十分に清潔になると思います。

しかし、変更がある場合は、アップストリームで何が起こったかを見るまでコミットしたくない場合は、git stashを使用できます。あなたの作業ディレクトリを一時的にクリーンアップして変更を保存するので、引き抜くことができます(マージポイントを回避するにはgit pull --rebaseをお勧めしますが、それは個人的な味の問題です)。アップストリームの変更を取り除いたら、git stash popを使用してローカルの変更を元に戻すことができます。競合を解決し、不要な変更を取り除いた後、追加、コミット、最後にプッシュすることができます。

+0

+1、すてきな説明 – sha256

5

あなたはコマンドと混乱しています。

git commitgit pullがリモートもたらし、あなたのレポ

あなたがコミットされていない変更とプルしようとしているのにコミットするので、Gitは離れそれらの最初の(またはgit stashそれらをコミットにあなたを求めているのgitのデータベースに変更を保存します)、ローカルの変更をリモートのものとマージすることができます。

関連する問題