プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Git
  • 【Git】プルやフェッチについて
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Git】プルやフェッチについて

11.20

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

リモートリポジトリの内容をローカルリポジトリへ取り込む場合は下記2つの操作のどちらかを行います。

  • プル
  • フェッチ

プル

取得内容がワークツリーまで反映されて、ローカルリポジトリ内のローカルブランチに取り込まれる為物理ファイルが即座に書き換わります。非常に便利なのですがプルには注意点もあるので後述しております。

コマンド

1
git pull プル先のリモートリポジトリ名 プルするブランチ名

プル先のリモートリポジトリ名は「origin」という名前になっていることが多いでしょう。

用途

ローカルリポジトリで開発を行なっていて、リモートリポジトリが他のプルリクエストをマージして状態が変わってしまった際にリモートリポジトリの変更情報をローカルリポジトリにも取り込みたい場合に行います。

基本的に、Gitフローに従うのであればこのプルという動作はローカルリポジトリのmasterブランチに対してのみ行うことが多くなります。(自分が作業中のトピックブランチが他に人によって別途進められることは基本的にはない為。)、ローカルのmasterブランチの最新内容を別ブランチにも適応させたい場合はローカルでgit mergeコマンドを実行してマージさせることになります。

Gitフロー(またはGitHubフロー)とは?

GitHub社が自社で用いているGitを使用したワークフローのことです。

作業ごとにトピックブランチを一つ作り、その中で作業を行い細かい単位でサイクルを回すことです。基本的にmasterブランチの内容は常に安定しており本番反映をいつでもできるようにし、実作業はしません。

各作業をシンプルに管理することが可能で、Webアプリの開発で言えば頻繁なデプロイを前提としています。

ルール

  1. masterブランチはいつでも本番反映が可能
  2. 新しい作業に取り組む際はその作業内容のブランチを作成する。
  3. アドバイスが欲しい場合やコードの作成が完了したらプルリクエストを送る。
  4. masterブランチにマージできるのは、他メンバーにレビューをしてもらったソースだけ。
  5. masterブランチにマージされたら直ちにリリースする。
  6. 定期的にPushをすること。

直ちにデプロイする理由

masterブランチの内容とリリースされている内容に差分がないので今何をリリースしているのかがすぐにわかります。

すぐにデプロイする上で重要なこと

テストとデプロイ作業は自動化しておくことが重要です。

定期的にPushする理由

他のチームメンバーが今どのような開発状況なのか確認することができるためです。チームでの開発がスムーズになります。

メリット

作業の影響範囲を限定的にできること。

例えば、複数の機能のリリースを予定する場合だった際に、ブランチが分かれていない場合片方の実装が早く終わったが、片方の機能の開発が予定より伸びてしまった場合にリリースができなくなったりしてしまいます。

バグが見つかった時の切り戻しが容易なこと。

また、どちらかの機能にバグが混入されていた場合にブランチが分かれていた場合はどちらかのブランチだけ切り戻しを行えば片方の機能だけは使うことができます。このようにブランチを細かく切っておくと素早く柔軟な対応を行うことが可能なのです。

プルの種類

下記の2種類に分かれます。

  • マージ型
  • リベース型

マージ型

上でご紹介させて頂いた通常のgit pullコマンドの挙動になります。マージコミットが残るので履歴を残したい場合に使いましょう。

リベース型

--rebaseオプションを付加します。マージコミットは残りません。

1
git pull --rebase <リモート名> <ブランチ名>

例えば、「git pull --rebase origin master」のように使います。

フェッチ

ローカルリポジトリへの情報取得しか行わずワークツリーには反映されません。仕組み的には、ローカルリポジトリの中にあるリモート追跡ブランチ(origin/master)に取り込んでいます。ワークツリーに反映させる場合はプル操作を再度行うか、ローカルでマージ操作 を行う必要があります。

リモート追跡ブランチについては下記の記事でも解説しています。

【Git】リモートリポジトリからローカルリポジトリに取得する。(フォーク、クローン)

コマンド

1
git fetch フェッチ先のリモートリポジトリ名

どこにファイルは保存されるのか。

下記ブランチがローカルに生成されて保存されます。「git branch -a」コマンドにて確認することが可能です。

1
remotes/リモートリポジトリ名/ブランチ名

用途

「リモートリポジトリから最新の状態は取得したいが、まだローカルブランチに反映させたくない」と言う場合に使います。

ワークツリーに反映させたい場合

下記コマンドにてワークツリーに反映させます。

1
git merge リモートリポジトリ名/ブランチ名

プルとフェッチどちらを使えば良いか。

プルは特殊な動作をするので慣れるまでは「フェッチ」を使うようにしましょう。

プルの特殊な動作とは?

プルしてきたブランチの内容が、今現在いるブランチにマージされるという挙動になります。(仮に現在masterブランチにいて、testというブランチの最新情報をプルで取得してきた場合はそのままmasterブランチにtestブランチの情報がマージされてしまうことになります。)

ローカルでブランチを切り替えていた場合に別ブランチの情報をプルしてしまうとローカルの別ブランチにそのままマージされてしまいソースがぐちゃぐちゃになってしまう可能性があります。フェッチの場合は明示的にマージするブランチを指定できるので安心です。

それでもプルを使いたい場合

「現在作業中のブランチ」と、「取り込むブランチ」が必ず同じと安心できる場合のみに使うようにしましょう。

スポンサーリンク
  • 2019 11.20
  • miyabisan2
  • コメントを書く
  • Git
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 12.08

    【Git】「プルリクエスト」時にmasterブランチと差分があった場合

  2. 2019 11.21

    【GitHub】画面の見方

  3. 2020 03.07

    【Git】スタッシュについて

  4. 2022 07.11

    【Git】「pre-commit」について

  5. 2019 11.21

    【Git】コンフリクトに関する知識

  6. 2019 11.18

    【GIt】よく使うコマンド一覧

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Git】マージに関する知識

【Git】コンフリクトに関する知識

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Git
  • GitLab
  • GraphQL
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • WebRTC
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー