HOWTO · Git

Git プルがファイルを更新しない

Git にローカルリポジトリ内のファイルを更新させることができます。gitpull コマンドがローカルリポジトリ内のファイルをリモートリポジトリからのファイルで更新できない理由について説明します。

このページの内容

この記事では、git pull コマンドがローカルリポジトリ内のファイルをリモートリポジトリからのファイルで更新できない理由について説明します。

git pull 機能はいくつかの理由で誤動作する可能性があります。よくある理由と、それらを修正する方法を見ていきます。

情報が不足しているために git pull がファイルを更新しない

Git に十分な情報がない場合は、次のようなエラーメッセージが表示されることがあります。

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
    git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
    git branch --set-upstream-to=<remote>/<branch> master

このようなメッセージが表示された場合、Git では、現在のローカルブランチで追跡するリモートブランチを指定する必要があります。git branch --set-upstream-to=<remote>/<branch> master コマンドを使用してから、git pull コマンドを実行して、変更元の場所を Git にポイントします。

git pull ローカルリポジトリ内のコミットされていないファイルが原因でファイルが更新されない

ソースコード管理システムとして、Git はファイルとデータの損失を防ぐために最善を尽くします。このため、Git は、git pull コマンドを実行するときに、ローカルファイルをリモートリポジトリのファイルとマージすることを拒否する場合があります。

Git には forced git pull コマンドがないため、システムを呼び出して変更をマージできます。コミットされていない変更がある場合は、次のようなエラーメッセージが表示される可能性があります。

$ git pull
From REPOSITORY_URL
 * branch            master     -> FETCH_HEAD
   a152b19..171e4a2  master     -> origin/master
Updating a152b19..171e4a2
error: Your local changes to the following files would be overwritten by merge:
  file1.txt
  file2.txt
Please commit your changes or stash them before you merge.
Aborting

これを修正するには、git pull コマンドを実行する前に、git stash コマンドを実行してローカルの変更を隠します。

最後のステップは、git pull コマンドの後に git stash apply を実行することです。このコマンドは、隠された変更を作業ディレクトリに適用します。

$ git stash
Saved working directory and index state WIP on master: d91368b Previous commit message
$ git pull
From REPOSITORY_URL
 * branch            master     -> FETCH_HEAD
   a152b19..171e4a2  master     -> origin/master
Updating a152b19..171e4a2
Fast-forward
 file1.txt | 1 +
 file2.txt | 1 +
 2 files changed, 2 insertions(++)
$ git stash apply

git pull コマンドを実行する前に変更をコミットすることもできます。

$ git commit -am 'Committing two files before git-pull'
[master d91368b] Committing two files before git-pull
 2 files changed, 2 insertions(++)
$ git pull
From REPOSITORY_URL
 * branch            master     -> FETCH_HEAD
   a152b19..171e4a2  master     -> origin/master
Updating a152b19..171e4a2
Fast-forward
 file1.txt | 1 +
 file2.txt | 1 +
 2 files changed, 2 insertions(++)

ローカルの変更が必要ない場合は、git pull コマンドを実行する前にそれらを破棄できます。

git rest --hard コマンドと git clean -fd コマンドを使用して、追跡されていないファイルを破棄できます。破棄を元に戻すことはできないため、これらの変更は必要ないことを確認してください。