サーチ…
前書き
Gitを使ってローカルの変更が中央のリポジトリのサーバに送信されるのとは異なり、Gitを使用すると、サーバ上の現在のコードが取得され、リポジトリのサーバからローカルマシンに「プル」されます。このトピックでは、Gitを使用してリポジトリからコードを取得するプロセスと、異なるコードをローカルコピーに取り込む際に遭遇する可能性のある状況について説明します。
構文
- git pull [options [<リポジトリ> [<refspec> ...]]
パラメーター
パラメーター | 詳細 |
---|---|
--quiet | テキスト出力なし |
-q | --quiet 短縮形 |
--verbose | 冗長なテキスト出力。 fetchおよびmerge / rebaseコマンドにそれぞれ渡されました。 |
-v | --verbose 短縮形 |
--[no-]recurse-submodules[=yes | on-demand | no] | サブモジュールの新しいコミットを取得しますか? (これはプル/チェックアウトではありません) |
備考
git pull
は指定されたパラメータでgit fetch
を実行し、 git merge
を呼び出して検索されたブランチヘッドを現在のブランチにマージします。
ローカル変更による更新
ローカルの変更があると、 git pull
コマンドは報告を中止します:
エラー:次のファイルのローカル変更は、マージによって上書きされます。
更新するには(Subversionで行われたsvn updateのように)、以下を実行できます:
git stash
git pull --rebase
git stash pop
便利な方法は、以下を使用してエイリアスを定義することです。
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
git config --global alias.up 'pull --rebase --autostash'
次に簡単に使用できます:
git up
リモートからコードを引き出す
git pull
引き上げる、ローカルを上書きする
git fetch
git reset --hard origin/master
注意: reset --hard
を使用して破棄されたコミットは、 reflog
とreset
を使用して回復できますが、コミットされていない変更は永久に削除されます。
origin
とmaster
をリモートに変更し、異なる名前が付いている場合はそれぞれ強制的にプルするブランチに変更します。
引っ張るときに線形履歴を保持する
引き上げ時のリベース
リモートリポジトリから最新のコミットを取得していて、現在のブランチにローカル変更がある場合、gitは自動的にリモートバージョンとバージョンをマージします。あなたのブランチのマージ数を減らしたいのであれば、ブランチのリモートバージョンでコミットをリベースするようにgitに指示することができます。
git pull --rebase
デフォルト動作にする
これを新しく作成したブランチのデフォルトの動作にするには、次のコマンドを入力します。
git config branch.autosetuprebase always
既存のブランチの動作を変更するには、次のようにします。
git config branch.BRANCH_NAME.rebase true
そして
git pull --no-rebase
通常のマージプルを実行する。
早送り可能かどうかを確認する
ローカルブランチの高速転送のみを許可するには、次のコマンドを使用します。
git pull --ff-only
これは、ローカルブランチが早送りできないときにエラーを表示し、上流にリベースまたはマージする必要があります。
プル、 "許可が拒否されました"
.git
フォルダーに間違った権限があると、いくつかの問題が発生する可能性があります。完全な.git
フォルダの所有者を設定して、この問題を解決します。場合によっては、別のユーザーが.git
フォルダーの権限を取得して変更することがあります。
問題を解決するには:
chown -R youruser:yourgroup .git/
ローカルリポジトリへの変更の引き込み
単純なプル
他の人とリモートリポジトリ(GitHubなど)を使って作業しているときは、ある時点で変更内容を共有したいと思うでしょう。リモートリポジトリに変更をプッシュすると、このリポジトリからプルすることで変更を取得できます。
git pull
大部分の場合、それを行います。
別のリモートまたはブランチからプルする
名前を指定して、別のリモートまたはブランチから変更を取り込むことができます
git pull origin feature-A
分岐引っ張ってくるfeature-A
フォームのorigin
ローカルのブランチに。リモート名の代わりにURLを直接指定することもできますし、ブランチ名の代わりにコミットSHAなどのオブジェクト名を指定することもできます。
手動プル
git pullの振る舞いを模倣するには、 git fetch
を使い、 git merge
使うことができます
git fetch origin # retrieve objects and update refs from origin
git merge origin/feature-A # actually perform the merge
これにより、より多くの制御が可能になり、リモートブランチをマージする前にリモートブランチを検査することができます。実際、フェッチした後、 git branch -a
使ってリモートブランチを見ることができます。
git checkout -b local-branch-name origin/feature-A # checkout the remote branch
# inspect the branch, make commits, squash, ammend or whatever
git checkout merging-branches # moving to the destination branch
git merge local-branch-name # performing the merge
これは、プル要求を処理するときに非常に便利です。