1

定期git pull的に実行すると、コマンドが次のようなエラーで終了することがあります

Your local changes to the following files would be overwritten by merge:  
app/Ribbon.xaml  
Please, commit your changes or stash them before you can merge

この特定のケースでは、このファイルの 1 行をローカルで変更し、リポジトリ内の新しいバージョンでも遠く離れた 1 行を変更しました。競合、名前の変更、行末の変更、サブモジュールはありません。したがって、この場合、git が変更を自動的にマージすることを期待 し git commitますgit stash

そして質問: git が競合のない変更を(ローカルで変更されたファイルに) 自動的にマージするのを妨げるものは何ですか?

私の質問では、一部のデータが欠落している可能性があります。もしそうなら、他に何をチェックすべきか教えてください。


[2012 年 6 月 27 日 14:15] 回答のヒントによると、ローカルで変更されたファイルへの変更のマージを拒否するのが git の通常のポリシーです。これを考慮して、gitが変更をローカルで変更されたファイルに自動的にマージできるようにする方法のような質問に言い換えますか?

4

2 に答える 2

0

Gitは、プロジェクトのルートにある.git/ディレクトリの下にあるリポジトリ内のファイルを処理します。

Gitは、プルとマージを行うときに比較のためにこのリポジトリを使用します。

あなたの場合、Gitはあなたが変更を加えたことに気付くほど賢いですが、それらを追加またはコミットしていないため、gitはそれらを処理できません。

実際にファイルをgitに追加しておらず、gitが実際に競合があるかどうかを知らないため、変更がコードの別々の領域にある場合でも、メッセージが表示されます...gitがファイルを「見る」まで。あなたgit addgit commitファイルがリポジトリにある場合、gitはそのファイルを「処理」でき、変更が別々の領域にある場合は、探していた自動マージを実行できます。

だからそれはそのメッセージを与えます。

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

  • ローカルファイルを追加してコミットすると、gitはマージを実行できます。

  • ローカルの変更を隠して保存し、新しいサーバーファイルをプルします。

  • 現在の変更でブランチを作成します。チェックアウトを使用してから、マスターに戻り、リセットを使用します。

于 2012-06-27T11:32:37.497 に答える
0

これはgitの自然な動作だと思います。ファイルはステージングまたはコミットされていないため、gitはファイルをどのように処理するかを実際には認識していません。ファイルでの意図を推測するよりも、gitがプルを拒否する方が適切です。私は通常、プルする前にコミットされていない、ステージングされていない変更を隠し、その後に隠しを適用します。

于 2012-06-27T09:45:34.150 に答える