学校のマシンで git リポジトリをセットアップし、別のホーム マシンで同じリポジトリを複製します。自宅のマシンでコミットしてプッシュしましたが、学校のマシンへの変更を更新したいと考えています。私は何をすべきか?試してみgit remote update
ましたが、ファイルを確認したときに更新されませんでした。
3 に答える
あなたはそれを間違えました:)
学校のマシンで裸のリポジトリとしてではなくリポジトリを使用している場合は、次のことを行う必要があります
git reset --hard
プッシュした後、refを更新するだけなので、作業コピーではありません
ベアリポジトリを使用し、サーバー上の他のマシン/リポジトリGitからプル/プッシュする方がはるかに優れてい ます
質問に のタグを付けたのでbitbucket
、次の仮定を行います。これらの仮定のいずれかが正しくない場合は、質問で明確にしてください。この回答を更新します。
- 全部で 3 つのリポジトリがあります
- ワンオン
bitbucket
bitbucket
学校のマシン上のリポジトリのクローンbitbucket
ホーム システム上のリポジトリのクローン。
- ワンオン
- ホーム クローンで、次のような手順を実行します。
git add <changes>
git commit -m '<message>'
git push <remote> <branch>
- 学校のクローンで
git remote update
はすべてのgit remote update
リモートの変更をフェッチしたため、ホーム リポジトリによってプッシュされた変更が同じリモートにある場合、それらは学校システムのリポジトリにロードされています。
ここで重要なのは、リポジトリが.git
フォルダーであるため、その中の参照は更新されましたが、作業コピーは更新されませんでした。作業コピーを更新するには、ローカル リポジトリにフェッチされた変更を作業ディレクトリにマージする必要があります。これは で行われgit merge <options>
ます。
タグに基づく私の仮定が正しくなく、リポジトリが 2 つしかない場合。学校と家。次にgit merge <options>
、ローカルの変更も行わない限り、変更を作業コピーに取り込む必要があります。その場合、次のようなことを行います
git stash
git merge <options>
git stash pop
この時点で、スタッシュからポップされたローカルの変更とコミットの間の競合を解決します。
変更をローカル コピーに保持したくない場合は、. を使用して作業コピーを最後のコミットの状態に戻すことができますgit reset --hard
。
最後に 1 つの注意事項として、回避できる場合は非ベア リポジトリにプッシュしないでください。通常は可能です。ホーム リポジトリが学校のリポジトリにプッシュするよりも、学校のリポジトリがホーム リポジトリから変更をプル (フェッチ/マージ) する方がはるかに優れています。