Git fetch/pullについて
fetchとは
- みんなの更新内容を、自分の開発環境に取り入れる機能!!
他の人が作ったコミットやブランチ・タグなどを、自分の環境に取り入れることができる。
マージまでは行われないので注意!
特定のリポジトリのみ取得したい場合
git fetch origin
(リポジトリ名originを指定した場合)
リポジトリが複数あるとき、すべてから落としてきたい場合は、--allオプションをつける!
特定ブランチのみ取得したい場合は「リポジトリ名」と「ブランチ名」を指定する_φ(・_・
fetchとpullの違い
「pullコマンド」と「fetchコマンド」
pullコマンドとは、、
fetchコマンドと同じく、「リモートリポジトリ」と「ローカルリポジトリ」の同期をかけるコマンド。
違いは、同時にブランチのマージまで実行してくれる点!
使い分け
他の人の作業と自分の作業をすり合わせる大事な作業なので、基本的には「fetchコマンド」を利用すべき!
「fetchコマンド」で更新を取得し、内容を確認したのちに、マージ作業に取りかかる流れ!
ちなみに
mergeとは?
- 現在のブランチ(HEADの指している場所)へ、他のブランチの更新を取り込む処理
git merge 取り込みたいブランチ
コンフリクトとは
同じ場所を同時に更新してしまった(衝突)場合
どちらの処理を優先すればいいのか、gitが判別できない
2つの解消方法
手動
コンフリクトの場所を確認
(エラー文をみて場所を判断する)
👇
例えば、test.txtで衝突が発生していますというメッセージ文だったら
text.txtの中身を覗き、
優先したい方だけ残すように修正する!
👇
解消し終わったらコミット!
修正が終わったら、必ず変更箇所に対してaddとコミットを行うこと!
そうすることでマージコミットが生成される
片方を破棄する方法
片方の更新のみ優先したい場合はもっと簡単にできる🙆🏻♀️
現在いるブランチを優先したい
git checkout --ours text.txt
取り込むブランチを優先したい
git checkout --theirs text.txt
任意のブランチの内容のみを残すことができる!
addとcommitを最後に行い、マージコミットを作る。
ちなみに
mergeには2種類ある
- fast-forward(早送りマージとも呼ばれる)
fasta-forwardはマージコミットが作られない
ブランチの位置が最新の位置に移動されるだけ、、
- no-fast-forward
それぞれ別々の開発が進んでしまっている場合、マージコミットが作られる!
マージコミットが作られるコミットが、no-fast-forwardと呼ばれるコミット。
マージコミットが必要ない場合でも、あえてマージコミットを残しておいた方が良いケースも多いらしく、結構重要
それを実現するために、mergeには--no-ffオプションが存在する!
git merge --no-ff 取り込みたいブランチ名
このオプションをつけると、強制的にマージコミットが作られるので覚えておく💪🏻
課題提出でリモートリポジトリで更新したREADMEをローカルリポジトリに持ってくる時に
わからなくなってしまったのでまとめて使い分けられるように理解!
マージに種類があることも学べたからよかった!
いよいよ今日から本格的に学校がスタートしたからzennも毎日更新して
自分の成長を記録できるよう頑張ろう❤️🔥
とにかく、やることが多くて頭がいっぱいいっぱいだけど
負けない!全部やったる!
パワーーーーー
Discussion