リモートがorigin
で、ブランチがmaster
で、すでにmaster
チェックアウトしたとします。次のことを試してみてください。
git fetch origin
git reset --hard origin/master
これは基本的に、現在のブランチを取得し、それをHEAD
リモート ブランチの にポイントするだけです。
警告: コメントに記載されているように、これはローカルの変更を破棄し、origin にあるもので上書きします。
または、配管コマンドを使用して、本質的に同じことを行うことができます。
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
編集:これが機能する理由を簡単に説明したいと思います。
.git
フォルダーには、任意の数のリポジトリーのコミットを保持できます。コミット ハッシュは実際にはコミットの内容の検証方法であり、ランダムに生成された値ではないため、リポジトリ間でコミット セットを一致させるために使用されます。
ブランチは、指定されたハッシュへの名前付きポインターです。設定例は次のとおりです。
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
これらの各ファイルには、コミットを指すハッシュが含まれています。
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
これらはすべて内部の git ストレージ メカニズム用であり、作業ディレクトリとは独立して動作します。次のようにします。
git reset --hard origin/master
git は、origin/master が指すのと同じハッシュ値で現在のブランチを指します。次に、そのハッシュのファイル構造/コンテンツと一致するように作業ディレクトリを強制的に変更します。
これが機能していることを確認するには、次のことを試してください。
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD