私は、リモート リポジトリから取得したサイトのローカル バージョンに取り組んでおり、サイトに変更を加えました。それに取り組んでいるパートナーも変更を行っており、私が作成または変更したファイルを上書きせずに、それらをローカル バージョンにプルする必要があります。
変更を隠して後でアクセスできることはわかっていますが、これが最善の方法ですか?
両方が同じファイルに変更を加えた場合、ソース管理ソフトウェアは、可能な場合は 2 つをマージして、両方の変更を受け入れる必要があります。
マージの実行に失敗した場合、ファイルは競合として強調表示され、違いを解決するために手動で介入する必要があります。
git pull は、基本的に次の 2 つの操作のショートカットです。
git fetch
リモートから履歴をダウンロードします。git merge
これにより、現在のブランチに新しい履歴がマージされます。リポジトリからの変更がローカル ファイルにマージされるのは、ステップ 2 です。これは、git に要求するためです。
問題は、なぜそれらの変更が必要なのかということです。それらを検査しますか?
マージせずに履歴のみが必要な場合は、 plain を使用できますgit fetch <remote>
。
ローカル コピーで「作業中」と言う場合は、定期的かつ散発的にローカル リポジトリに変更をコミットすることをお勧めします。
次に、git fetch origin
(オリジンがリモートであると仮定して) とgit rebase origin/master
(マスターからの最新の変更が必要であると仮定して) を実行できます。
次に、たとえば、リモートの変更の上に 20 個の git コミットがあるとしgit rebase -i
ますが、いつでも .ローカル開発ブランチの外。
歴史を台無しにするべきではないと言う純粋主義者がいますが、専門のローカル開発ブランチでこれを行うことは完全に受け入れられると思います。このようにして、開発中の機能のローカル ヒストリーが残りますが、それによって可能になるすべての利点、まだ世界に公開する準備ができていないヒストリーがあります。
代替手段は、行うgit stash; git pull origin/master; git stash pop
か、または同様のことです。
また、どちらの場合も、既存の競合を解決する必要があることに注意してください。競合が発生した場合に必要なのは、リモートから変更をプルする前にコピーを保持することである場合、ファイルのローカル バージョンを保持するだけで競合を解決できます。しかし、これが誰かが必要としているものだとは思えません。物事を壊す可能性があります。
既存のブランチに引っ張ると、彼のコミットはあなたのコミットとマージされるか、競合が発生するか、またはその両方が表示されます。
ただし、自分のブランチを新しいブランチにチェックアウトすることはできました。
git checkout -b newbranch
それを元の新しいブランチにプッシュします
git push origin newbranch
その後、あなたはすることができますgit fetch
作業を失うことなく、あなたの側からそのブランチに安全にチェックアウトします。
git checkout newbranch
必要に応じて、後で彼のブランチをあなたのブランチとマージできます。