先に謝罪:アドベントカレンダーに間に合わせるため、多少雑になってしまいました。必要に応じて加筆修正入れます
gitに出会って7年くらい経ちましたが、「これだけ知っておけば90%くらいの状況においては困らなくね?」と感じているコマンドについて整理しておく。
gitコマンド多すぎ問題があるので、どこまで知れば取り急ぎ、9割程度の場合は困らないかにフォーカスします。
これだけは呼吸をするように命令すべし(と思っているものです)。
※概要理解のため、細かいところを省いたりしていますが、細かい部分については実践で学ぶのが最も良いと思うので、それぞれのプロジェクトなどで実践してください。
説明すること
- コマンドで何がおきるかの概要
説明しないこと
- 厳密なブランチの変化
- commit履歴の変化
git clone
GithubやGitLabで管理されているリモートリポジトリを、ローカルリポジトリとして、文字通りクローン(複製を作る)コマンド。
開発などを開始する際に、まず初めに実行するコマンド。
使い方
まず任意のディレクトリに移動する。
cd /C/user/soepy
hogeにあるfugaリポジトリをローカルにcloneする場合は以下のようになる。
git clone https://github.com/hoge/fuga.git
soepyフォルダ以下にfugaフォルダが作成されます。その中には現在のmainブランチ(masterとか、developとかプロジェクトによって名前は違うが)の状態がクローンされています。
git checkeut -b
gitの特徴であるブランチ管理のメリットを享受するための最も重要なコマンドかもしれません。
出荷物を作成したり、最も状態の進んだブランチがmainであるのであれば、そこから自分用のブランチを複製して開発し、再びその修正をmainに戻す(マージする)。
一般的に最もシンプルな「トランクベースの開発」といったりするものは、このような流れで開発が進んできいます。
そのために新しいブランチをmainブランチから分岐させて新しく作るのがgit checkout -b コマンドという理解で概ねOKです。
使い方
まずcloneしたフォルダに移動します
cd /C/user/soepy/fuga
この時mainブランチにいることを確認してください。
git branch
先頭に * がついているものが今のブランチです
ここでtopic-hogeブランチを作って切り替える場合
git checkout -b topic-hoge
これで、目的が達成されます。
※正確には -bをつけることでbranchとcheckoutを同時にやっていることにになるので複数のコマンドを集約している感じです。
git fetch
git cloneはなにもないところにリモートから持ってくるコマンドですが、git fetchはすでにあるものに対し、リモートにのみ存在する差分をローカルのリモート追跡ブランチに持ってくるだけのコマンドです。
pullとの差は、実際にローカルのブランチに入るか入らないかの差です。
ここイメージしづらいのでリンクしておく。
使い方
まずcloneしたフォルダに移動します
cd /C/user/soepy/fuga
リモートリポジトリのブランチの状態取り込む場合は以下のようになります
git fetch
git pull
チーム開発をすれば、他者の修正内容が反映されることによりブランチの状態が変化していきます。cloneした時空変更が増えます。その変更をローカルに取り込む場合、このpullコマンドを使います。
使い方
まずcloneしたフォルダに移動します
cd /C/user/soepy/fuga
リモートリポジトリブランチの状態取り込む場合は以下のようになります
git pull
ここで注意なのが、「git pull」は、今のブランチの差分をリモート→ローカルに持ってくる動作になります。
mainブランチの内容をローカルリポジトリに持ってくるときはcheckoutしてmainブランチに切り替えた状態でやります。
git add
修正した差分をブランチに反映させるための準備(ステージング)を実行するコマンドです。
コードを修正したらまずこのコマンドを実行します。
使い方
差分全てをステージングする
git add .
特定のファイルの差分のみをステージングする
git add /C/user/soepy/fuga/aaa.py
特定のフォルダ階層の差分のみをステージングする
git add /C/user/soepy/fuga/piyo/
ワイルドカードに一致する差分のみをステージングする
git add *fuga/piyo*
git commit
addコマンドでステージングしたものをcommitします。
SVNではcommit=リモートに反映ですが、gitでは、自分が編集しているブランチに対しcommit履歴をつくる処理となります。
使い方
ステージングしたものをcommitする
git commit -m "コミットを作成する"
-m "コミットを作成する" をつけることでコミットメッセージをつけます(通常のチーム開発をしている場合は必須だと思います)
git push
変更をリモートリポジトリに反映します。
このコマンドを実行したあとにGithubやGitLab上でPR、MRを作成することになります。
使い方
コミットをリモートに反映させます。
git push origin/topic-hoge
補足リカバリーする時に知っておくとたすかる
- git reset --soft HEAD^
- git reset --hard
- git push -f
あとは適宜足していきます