Git 勉強会2
全体目標
gitを使って開発ができるようになる
方針
基本的にはCLI(コマンドベース)
CLIができたらGUIだってできるだろうって考え
今回の概要
- clone
- push
- pushの引数
- branch
- branchとは
- checkout
- ブランチの作成と移動を同時にする
- fetch
- merge
- conflict
- conflict時の対応
- pull
コマンド集
clone
サーバからgitプロジェクトを取ってくるコマンド
git clone https://~ directory
directoryはgit clone
したリポジトリをどこに保存するのかを指定できる
git clone https://github.com/facebook/react.git reactProject
これでreactProject
というディレクトリにgithubからダウンロードしたプロジェクトが保存されます
directoryは省略可能で、省略した場合はプロジェクト名のディレクトリが作成され保存される
push
自分の更新分をサーバにアップロードするコマンド
git push remote branch_name
pushの引数
- remote
- サーバアドレスのエイリアス(originが慣例)
- 自由に設定可能
-
git push hoge master
のようにすればhoge
で設定されているサーバにpush
できる
- branch_name
- ブランチ名
git push
について詳しくはブログにまとめてる
Link: git push
branch
ブランチを切るためのコマンド
git branch branch_name
ブランチとは
簡単に言うと特定のコミット(大概最新)から
「○○機能作成」「リリース準備」のように分岐して開発をするためのもの
Link: サルでもわかるgit入門 - ブランチとは
checkout
ブランチを切り替えるためのコマンド
Git 2.23から入ったswitch
コマンドの方がわかりやすいので、そちらを使うといいです
https://gist.github.com/yuzu441/9cc191aa9bdfdd39ee5da07284f2d1b6/#file-git_study04-md
git checkout branch_name
個人的にはgit reset
使うからあんまり使わないけど
変更したファイルを最新のコミットの状態まで戻す機能もある
git checkout appplication/app.js
ブランチの作成と移動を同時にする
branch
で作って、checkout
で移動をするのは面倒くさい
checkout
コマンドの-b
オプションを使えば同時にできる
git checkout -b branch_name
fetch
サーバのリポジトリから更新分を取ってくるコマンド
git fetch remote branch_name
基本的にはremote
とbranch_name
まで指定して使用する
git fetch
にはリモートで削除されたブランチを
ローカルで持ってるリモートブランチ情報を削除してくれる機能もあるので
おまじないの用に--prune
オプションを付けておくといい
git fetch -p remote branch_name
(-p
は--prune
の省略)
merge
ブランチとブランチを結合(マージ)するコマンド
git merge branch_name
mergeには
- fast forward
- non fast forward
の2種類があって
- fast forward
マージ元のブランチに続けるようにコミットをします
(branchAの先頭にbranchBの更新分をつなげるイメージ) - non fast forward
マージする際に、下の例のようなマージコミットというコミットをする
Merge pull request #1327 from TheBits/silent-merge
conflict
マージの際に競合(conflict)が起きることがあります
これはAの更新分とBの更新分が同じ場合いかに賢いgitのマージ機能といえど
- どちらを残すのか
- どちらとも残すのか
- どちらも残さないのか
というのをgitが自動で処理をすることができません
そこであなたがgitに変わってマージ作業をしてやる必要があります
conflict時の対応
コンフリクトが起きた部分には
<<<<<<<<< HEAD
今のブランチの最新のコミットの状態
=========
マージをしようとしてるブランチの状態
>>>>>>>>> commit id
のようになっているので、残す所を残して、消す部分を消します
(<<<< head や =====, >>>> commitidは消してください)
今回は両方を残すことにします
今のブランチの最新のコミットの状態
マージしようとしているブランチの状態
編集後git add
でコンフリクトが起きたファイルをaddして
すべてのコンフリクトが解決したら変更が確定したのでgit commit
しましょう
pull
厳密に言うと違いますが
git fetch
とgit merge
を合わせてような機能です
git pull origin master
origin
リポジトリのmaster
をfetch
して
現在のブランチにmerge
するイメージです