リモートがorigin
で、ブランチがでmaster
、すでにmaster
チェックアウトしているとすると、次のことを試してみてください。
git fetch origin
git reset --hard origin/master
これは基本的に、現在のブランチを取得してHEAD
、リモートブランチのを指すだけです。
WARNING:コメントで述べたように、これはローカルの変更を捨てますと、原点にあるものは何でもして上書きします。
または、配管コマンドを使用して、基本的に同じことを行うことができます。
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