ローカル リポジトリをリモート リポジトリと同期して、ローカル リポジトリがリモート リポジトリの 100% コピーになるようにします。つまり、これらのリポジトリで特定のファイルが異なる場合は、ローカルのファイルをリモートのファイルで上書きし、リモートに存在しないファイルがローカル リポジトリにある場合は、ローカル ファイルが削除されます。
リモート リポジトリの新規クローンを作成する以外に、これを実現する方法はありますか?
ベストアンサー1
[編集された回答]考慮すべき部分がいくつかあります:
実際にはリモコンで「完全同期」を操作しているわけではありませんが、次のようにすればおそらく必要なことが達成されるでしょう。
注意: ローカルの変更が失われる可能性があります。
ブランチの参照
リポジトリからフェッチする場合、新しい (リモート) 参照は自動的に同期されますが、古い参照はローカルから消去されません。パージ オプションでこれを修正できます。[元の回答]
git fetch --prune
-p, --prune
フェッチする前に、リモート上に存在しなくなったリモート追跡参照を削除します。git fetch prune オプションのドキュメント (git-scm)
このpull
コマンドにはprune
オプション(--prune
または-p
)もあります。git-scm ドキュメント
git pull -p
コミット
すべてのローカル ブランチが同期されていない可能性があります。
現在のブランチをリモートと同期し、ローカルの作業が失われる可能性がある場合は、リモートの位置にリセットします。
git reset --hard origin/<current_branch_name>
再度注意: これにより、ローカルの変更 (コミットされていない変更とプッシュされていないコミット) がクリアされます。
注: これにより、他のブランチは「同期されていない」状態になります。
ファイル/変更
コミット変更がステージングされていない
これらは上記の方法で削除されるはずですgit reset --hard
追跡されていないファイル
これらは、
git clean -f -d
一部のローカル作業が失われる可能性があることに注意してください。
無視されたファイル
一部のファイルは無視されるように宣言され(.gitignore
ファイル経由)、git 追跡から非表示になります。
これらを消去するには、次を実行します。
git clean -f -d -x
このgit clean
コマンドには、dry-run
間違いをすぐに起こさないようにするための便利なオプションが付属していることに注意してください。
git clean -f -d -x -n
-n, --dry-run
実際に何かを削除するのではなく、何が行われるかを示すだけです。
最も評価の高い回答として、私は、あまり答えになっていない以前の回答を再度検討しなければならないと感じました。より良い回答を作成するのに役立ったコメントと他の回答に感謝します。