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

私はオンラインでかなりの数のスレッドを読みました、そしていくつかの異なるオプションが提案されました。1つのアプローチが実行されました:

 git stash
 git pull
 git stash pop

隠しの基本原理は理解できたと思います。私の質問は、これは良い解決策ですか、そしてこのアプローチを使用して問題が発生する可能性がありますか?私は一般的にWeb開発について十分に理解していますが、私はかなり基本的なGitユーザーであり、現時点では問題から抜け出す能力はあまりありません。

4

4 に答える 4

14

git stashグレッグが言ったように、何らかの理由で衝突を修正することは奇妙になる可能性がありますが、完全に合法です。しかし、それらはまだ修正可能であり、実際には何もfubarしません。スタッシュを再適用するために私が知っているコマンドはですがgit stash applypop私が気付いていない代替手段である可能性があります(または、別のことを行う可能性があるので、わかりません。おそらく使用することをお勧めしますapply)。

マージする前にこれらの変更をコミットしたくない理由はありますか?一般的に、それは正しいことです。

別のオプションは次のとおりです。

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

これにより、新しいブランチが作成され、競合することなくマスターを最新の状態に保つことができます(マスターを再度チェックアウトしてから、プルまたはフェッチ+マージします)。次に、ブランチを(マスター上にある間に)とマージして戻すことができます git merge newwork。競合することなく新しい作業の作業を保持しながら、マスターの競合を解決できます。競合が実際に物事を台無しにすることを心配している場合、これは少し安全ですが、一般的に、競合はプロセスの一部にすぎないので、あまり心配しないでください。

于 2011-10-08T03:24:16.233 に答える
6

新しいコードをプル(マージ)する前に、常にローカルの変更をコミットすることをお勧めします。コミットしないと、Gitはローカルの変更をどのように管理したいかわかりません。きれいな作業ツリーとのみマージします。

同じファイルがローカルおよび他の誰かによって変更されているため、マージで競合が発生する可能性があります。私の経験では、実際のマージ操作から競合を解決することは、スタッシュポップ操作から同じ競合を解決するよりも少し簡単です。

于 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 に答える