既存のリモートリポジトリに新しいgitリポジトリをセットアップしようとしています。
ローカルファイルでリモートリポジトリを上書きしたいのですが、gitは最初にこれらのリモートファイルをプルしてマージする必要があると言っています。
プルする方法はありますが、ローカルファイルがリモートによって上書きされないことを確認してください。
既存のリモートリポジトリに新しいgitリポジトリをセットアップしようとしています。
ローカルファイルでリモートリポジトリを上書きしたいのですが、gitは最初にこれらのリモートファイルをプルしてマージする必要があると言っています。
プルする方法はありますが、ローカルファイルがリモートによって上書きされないことを確認してください。
回答:
ええ、そうです、そして...
ローカルコピーにリモートの内容を「上書き」させたいとのことですが、誰かがリモートリポジトリのファイルを別の方法で変更した場合、その変更を無視して「強制」しようとすると、可能性のある衝突を見ることさえせずにあなた自身の変更、まあ、私はあなた(そしてあなたの同僚)のために泣きます;-)
とはいえ、「正しいこと」を行うのは本当に簡単です。
ステップ1:
git stash
ローカルリポジトリ内。これにより、ローカルの更新がstashに保存され、変更されたファイルが編集前の状態に戻ります。
ステップ2:
git pull
変更されたバージョンを取得します。今、うまくいけば、それはあなたが心配しているファイルの新しいバージョンを取得しないでしょう。そうでない場合は、次のステップがスムーズに機能します。もしそうなら、あなたはやらなければならない仕事がいくつかあり、あなたがやったことを嬉しく思うでしょう。
ステップ3:
git stash pop
これにより、手順1で保存した変更バージョンと手順2でプルしたバージョンがマージされます。すべてが順調に進んだら、準備は完了です。
一方、ステップ2でプルした内容と変更(間に誰かが編集したため)の間に実際の矛盾があった場合は、それらを見つけて解決するように指示されます。やれ。
こうすることで、物事はずっとうまくいきます-深刻な問題について警告する一方で、実際の作業なしで変更を維持することができます。
最初にローカルの変更を隠しておき、次にプルしてから隠します。
git stash
git pull origin master
git stash pop
リモートからの変更を上書きするものはすべて競合があり、手動で解決する必要があります。
ローカルの変更をローカルのリポジトリにコミットしました。次に、ローカルファイルを変更せずにローカルリポジトリへのリモート変更を取得するには、を使用できますgit fetch
。実際にgit pull
は、2つのステップ操作git fetch
がありgit merge
ます。非破壊的な後にが続きます。「git pull」と「git fetch」の違いは何ですか?を参照してください。詳細については。
詳細な例:
リポジトリが次のようであるとします(変更を加えましたtest2
:
* ed0bcb2 - (HEAD, master) test2
* 4942854 - (origin/master, origin/HEAD) first
そしてorigin
リポジトリはこのようなものです(誰かがコミットしましたtest1
):
* 5437ca5 - (HEAD, master) test1
* 4942854 - first
この時点で、gitは文句を言い、test2
リモートリポジトリにpushしようとすると最初にpullするように要求します。ローカルリポジトリを変更せずにtest1を確認するには、次のコマンドを実行します。
$ git fetch
結果のローカルリポジトリは次のようになります。
* ed0bcb2 - (HEAD, master) test2
| * 5437ca5 - (origin/master, origin/HEAD) test1
|/
* 4942854 - first
これで、別のブランチにリモートの変更があり、ローカルファイルはそのまま保持されます。
次に、次は何ですか?(以前のと組み合わせた場合)とgit merge
同じ効果になるを実行するか、または私が望むようにを変更を適用するためにを実行すると、履歴がより明確になります。git pull
git fetch
git rebase origin/master
origin/master
git commit
ローカルな変化だけではないのgit pull
か?