サーチ…


前書き

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

便利な方法は、以下を使用してエイリアスを定義することです。

2.9
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
2.9
git config --global alias.up 'pull --rebase --autostash'

次に簡単に使用できます:

git up

リモートからコードを引き出す

git pull

引き上げる、ローカルを上書きする

git fetch
git reset --hard origin/master

注意: reset --hardを使用して破棄されたコミットは、 reflogresetを使用して回復できますが、コミットされていない変更は永久に削除されます。

originmasterをリモートに変更し、異なる名前が付いている場合はそれぞれ強制的にプルするブランチに変更します。

引っ張るときに線形履歴を保持する

引き上げ時のリベース

リモートリポジトリから最新のコミットを取得していて、現在のブランチにローカル変更がある場合、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

これは、プル要求を処理するときに非常に便利です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow