はじめに
初学者の私が備忘録としてGitの基礎コマンドについてまとめる。
GitHubが絡むものと、ローカルのGitのみでの動作のモノの差が
明示されていないサイトが多く、初学者としてはむずかしいなあと感じた。
ローカル操作編
GitHubのことは一旦置いといて、ローカル環境での操作のコマンドを記録していく。
ファイルを保存する関係のコマンド
git add
ファイルの中身をインデックスに追加する
ローカルのワークツリーからローカルのステージに記録
git commitの前段のようなイメージ
git add .
全ファイルを対象に記録する場合「.」忘れずに!!!!!!
git commit
追加・変更したファイルをGitに登録するためのコマンド
ローカルのステージからローカルのリポジトリに記録
git commitをする前にはgit addが必要
git commit -m "自由にメッセージ"
コミットする際に変更点をメモしておける。(例:会員機能を作ったよとか)
現状の確認に関するコマンド
まず初めに
- ワークツリー
現在作業中でaddもcommit行われていないモノ - ステージ
addされて、commitがまだのモノ - リポジトリ
addとcommitが済んでいる状態のモノ
git diff
リポジトリとワークツリーの差分をチェック
つまり、現在作業中のモノ(ワークツリー)とcommit済みのもの(リポジトリ)の差分を確認できる。
git diff --staged
リポジトリ(commit済み)とステージ(add済みcommit未だ)の差分をチェック
git diffと比較対象を「--staged」で変更されたコマンド。
git status
ワークツリーとステージの差分をチェック
git status -s
git statusは長いメッセージが出てくるが、それを省略して見やすくしてくれる。
git log
commitの履歴を確認することができる。
元に戻す系のコマンド
git restore ファイル名
addやcommitしたものに戻すコマンド
git restore file.txt
ステージ(add済commit未)からワークツリーへ「file.txt」をコピーする(元に戻す)
git restore --staged file.txt
リポジトリ(add済commit済)からステージ(add済commit未)へ「file.txt」をコピーする(元に戻す)
チーム開発編
ここからGitHubが出てくる
作業手順
- ローカルのメインブランチをGitHubのメインブランチと揃える
- 作業用ブランチを切って作業を行う
- ファイル修正・ローカル内でコミット
- GitHubへpush
- プルリクエストをする ※GitHub上での操作
- コードレビューをしてもらう ※GitHub上での操作
- マージをしてもらい、GitHubの内容を更新する ※GitHub上での操作
つまり、githubへpushしただけではGitHubは更新されていない!!
git branch ブランチ名
ブランチを作成するコマンド
ワークしているブランチはこれだけでは切り替わらないので注意!!!!
作業しているブランチを変えたい場合はgit switch ブランチ名
が必要
git branch
ブランチ一覧を表示
git branch -a
GitHub含めたすべてのブランチが確認できるみたい
git switch
ブランチを切り替える際に使用する。
git switch ブランチ名
ブランチ名のブランチへ移動する
git switch -c branch
ブランチを作成して移動する
ほな「git branch ブランチ名」はいらんわけや・・・。
git checkout ブランチ名
ブランチを切り替える際に使用する。
git switchとgit checkoutと何が違うん!?
- git switchは移動するのみ
- git checkoutは変更の取り消しも含まれる
つまり、git checkoutはgit switch+git restoreになるわけやな。
switchのほうが後から出てきた便利コマンドらしく、
これから学習する人はswitchで覚えたほうがわかりやすいっぽい。
確かにcheckoutって直感的にわかりにくい。
git merge 取り込みたいブランチ
現在のブランチに、他のブランチの更新を取り込む処理
ローカル内での話
git merge 取り込みたいブランチ
取り込みたいブランチを記述することがポイント
現在AブランチにいてBブランチの内容をコピーしたい場合は
git merge Bブランチとなる
git merge リモート名/取り込みたいブランチ
コンフリクト
同じ個所が変更されているものをmergeした場合に発生するエラー
正しい状態に書き直して再度mergeするとOK
GitHub周り
git push ※事前にGitHubとの連携が必要
ローカルでcommitしたものをGitHubに反映させる
※事前にGitHubとの連携が必要
git push リモート名 ブランチ名
git pull ※事前にGitHubとの連携が必要
githubのブランチをローカルのワークツリーへコピー
※事前にGitHubとの連携が必要
git pull リモート名 ブランチ名
git fetch ※事前にGitHubとの連携が必要
githubのブランチをローカルのリポジトリにコピー
※事前にGitHubとの連携が必要
git pullとは反映される場所が違うため注意!!!!
git fetch
とgit merge
を一発でできるようにしたのがgit pull
git fetchとgit pullは使い分けが便利らしい
git pullはコンフリクトが発生していたら修正が困難(らしい)
mainブランチ(自身が直接変更処理を加えないブランチ)へはgit pull
作業ブランチへはgit fetch→git mergeをした方がコンフリクトの解消がしやすい。
git clone ※事前にGitHubとの連携が必要
Github上からファイルを取り込む方法
なんかgit pull
と似てんな・・・・。
git cloneとgit pullって何が違うん!?
多分見た目上は結構同じな気がする。しかし、やってることは結構違う。
- git clone
ファイルをすべてコピーする - git pull
ローカルとリモートの差分をリモートからコピーする
おまけ編
git log
コミット履歴が見れる
コミットのIDとかも見れる。
git rebase
ブランチの状態を変更することができるコマンド
カレントブランチを他のブランチと直列回路につなぎ直せる。
並列回路⇒直列回路に切り替えるイメージ
チーム開発では混乱のもとになったりするので、そういうのがあるんだ程度でOK
git reset
コミットしたものに戻したい場合に使う
履歴を消してしまうので必要時は要検討すること
-
--soft
コミットだけリセット。(Headの移動だけ) -
--mixed
コミットとアドもリセット(Headの移動に加えて、addした状態も取り消す) -
--hard 最終手段なので全然使わない、リスクが大きい
コミットとアドとワークツリーもリセット(最終手段!ってかんじ)
--mixedに加えて、ワーキングツリーもすべて削除される
git reset --soft [巻き戻したい時点のコミットを指定]
git reset --mixed [巻き戻したい時点のコミットを指定]
git reset --hard [巻き戻したい時点のコミットを指定]
git stash
ブランチの内容をcommitしたくないが、ブランチの移動をしたい際に使用したりする
一時別置きができる機能
git revert
git resetとは違い、消した履歴が残る。
というより、消すというわけではなくコミットを「Revert状態」にするというイメージ。
あれ?このコミットどうしたっけ・・・?というのがgit logから確認できる。
そして、再revertすることで元に戻せる!
git cherry-pick
他のブランチから内容をコピーしてくる手法。特定のファイルだけでもいけるっぽい。
あまり使わなそう・・・。存在だけここでは知っておく。
Git勉強するうえでよくわからなかった言葉
ハッシュ
commitに割り振られているIDのようなもの
git log
で確認できるやつ
$ git log
commit 757cd618f38d574238bae4768ff1a1aedfafdb7a ☜
Author: DQNEO <dqneo@example.com>
Date: Thu Feb 4 21:18:28 2016 +0900
second commit
上記例の757cd618f38d574238bae4768ff1a1aedfafdb7a
がハッシュとかハッシュ値と呼ばれるやつ。