【Git】ユースケース別よく使うコマンド


ユースケース別よく使うコマンド

はじめに

前回は、概念を中心に説明しましたが、こちらではユースケース別にコマンドを説明します。

⇒前回: 【Git】ざっくり理解編

ユースケースごとなので、branch/reset/logなどは複数回出現しています。まずは軸となる、checkout/add/commit/mergeあたりから読むと理解しやすいかと思います。

ユースケース別よく使うコマンドまとめ表

主なケース
分類
ケース内容の
説明
コマンド コマンド説明
new branch 新しいbranchを立ち上げる init 空でbranch(初期値はmaster ブランチ)を立ち上げる。
(既存のプロジェクトの場合、ファイルを持ってきて、普通に全ファイルをindexしてcommitする)
branch 今のbranchの流れから現状(HEAD)地点に新たなbranch開始地点を作る
fetch リモートから立ち上げる時に使う。ローカルレポジトリにリモートとのリンク情報と共に確保する。

pullの場合、mergeまで行う。
branchの
履歴修正
branchの流れつまりcommit間の情報を変更 rebase
[要注意]
branchで分岐した地点(base)を変更する。mergeの複数版に近い。処理としては、baseで指定したところに指定したブランチの内容を逐次マージしていく(差分、つまり共通の祖先から)。

取込み済み差分は, mergeのFFのようにcommitが発生しない。

squash/fixupオプションで昼休みや打合せまえにcommitした、中途半端な内容を1commitにまとめることができる。reset+commitも限定的だがある意味まとめることができる。

rebaseすると分岐情報は消えるので、local(自分の範囲)に閉じた内容に使わないと、他人のマージ関連作業に影響が出る。

不要になったコミットやファイルを圧縮するにはメンテナンスとして、gcコマンドがある。
branch操作 branchに関する操作 branch branchを作ったり、branchに関する操作を行う。

branchに関するというのは、branchが対象であり、広く”branchに関係するもの"という意味ではない。

指定したbranchで開発開始するような時、working directoryを整備して始めるのであれば、checkoutを使う。
reset 参照情報である、ブランチ情報HEADの位置を別のcommitに再セットする。

commitやworkingをいじらないが、index,workingもオプションでリセット可能。
log commit情報の確認。
branchの流れのログを見る場合、便利なreflogがある。
開発開始! 開発開始するときに、ワーキングディレクトリに適切なファイル群をセット checkout 特定のコミットから開発を開始する。ブランチを指定すると、ブランチの最新を使う。
実行すると working / index /HEADがその指定したcommitに書き換わる。
pull  上記と違い、remoteから持ってきてlocalレポジトリに保存する。そのあとマージ作業を行い、以後checkoutと同様の動きをする。
作業環境変更 作業環境を戻したい、切り換えたい、保留したい時に使う stash checkout(環境切り替え)するときに、working directoryを保存しておく。popオプションで取り出せ、複数保存可能
checkout
[要注意]
checkout(環境切り替え)。影響範囲に注意(前述)。

working directory上書きでロストの可能性があるので、確認したいだけの場合、stashで退避するか、diffやlogで確認する。

ファイルが用意され存在していた場合上書きされるが、不要な管理外(未add)ファイルを消したい場合 cleanコマンドを使う。
reset 作業環境を戻す。HEAD/index先の内容は、レポジトリにあるので心配ないが、逆に(commitしていた)変更情報はブランチの流れに乗らないので、直接は残らない。working directoryも戻したい場合、--hardオプションで checkoutのように書き変える。ある状態にindexをsetし(WTは変更しない)ことから、結果としてindexを戻すことによく使われる。

その後commitすると巻き戻った範囲はbranchとして浮いた状態になる。

rebaseと同じく、大きく戻す場合、remoteレポジトリの範囲はやらないほうがいい。
1コミット変更 1コミットに対する変更を行う commit ステージングにあげた内容を、commitする。HEADの内容が変わり、indexはaddの時に同期済み。

基本、addしたファイルだけが対象。コミット対象であるファイルをステージングから取り消したいときはresetを使う。

ファイルの変更・削除は mv, rmコマンドを使う。

commitメッセージの変更については、branch履歴の修正の一環としてrebaseを使う
merge 現在のブランチHEADにマージするものを指定(commit同士)。working directoryではない。基本commitされる。

競合が発生すると止まり、確認される。commit済み同士なので、修正して継続も、停止も可能。

実際としてマージ処理が不要の場合(現在のブランチの最新から分岐した別ブランチをマージするとき)、FastForward(参照だけ変わる)になるが、branchの分岐タイミングを意味したいのであれば、新たにcommitを強制的にすることも可能。
cherry-pick mergeの発展版。指定した1commit分(つまり直前まで)の差分のみ取り込む。単語の意味は熟れたサクランボを選ぶさまから転じて、都合のいいものを選ぶ、えり好みであり、皮肉のニュアンスがある
revert cherry-pickの取消版。任意のcommitを除く。新たにcommitまで行う。

rebaseと同じく、大きく戻す場合、remoteレポジトリの範囲はやらないほうがいい。
確認 diff ソース内の行単位差分確認
add ファイルの差分確認
log gitの操作の情報、つまりcommit情報が見える。そのためオプションが豊富。
shortlogコマンドは短く出力する。
reflog branchの流れのログを見る場合、やっちまったなぁというとき使う。
show コミットオブジェクト情報を見る。
describeコマンドもある。
cat-file blobを見る。
status working tree statusを見るとき

用語について

用語分類 説明
working
tree
working tree/ワーキングディレクトリ、作業環境。localで開発するディレクトリトップから全階層を表す。

サンドボックスなので、自由にいじり倒せる場所。しっかりソースを保管する場所ではない。
branch ブランチ。commitの流れ。基本は親は一つだが、mergeすると複数存在する。baseの親(commit元)は ^1 それ以外は ^2, ^3で扱う
staging ステージングエリア ,index , cache ともいう。次のcommit対象一覧の意味がある。
merge マージ。現在のブランチに対して、取込み元を指定する。
commit スナップショット。ファイルリストでもある。直接、または間接にtreeオブジェクトを指している。TAG,HEAD,index(データ構造的にはtreeではなく直接ファイル構造を表現)など。blobのコミットオブジェクトとして管理。
HEAD 現在のブランチの最新 commitオブジェクトを指す。

コマンド使用例

ファイルを比較したいとき

diff コマンドまとめはこちら

開発を少しやり直したい時
(前回のコミットに戻す)

git checkout ・・・最後のコミット(開発開始時)
git checkout ブランチ名・・・任意のコミット
git checkout HEAD^ ファイル名・・・最後より一つ前のコミット(+ファイル指定)

※もちろんワーキングディレクトリとして、現在編集していたディスク上のファイルは上書きされます。

ステージングにaddして確保された内容を戻す場合

 git reset HEAD <ファイル名> ・・・最後のコミット(開発開始時)

開発の方向を変えたい時、ちょっと試しに作ってみたい時、事前確認したい時

環境の切り替えなので、checkoutを使う

先ほどのコミットにやはり
もう1,2個ファイルを 入れておきたい時

ステージングにあげてから以下のコミットをするとコミットをまとめると同時に
コミットメッセージを上書きできます。

git commit --amend

新規開発を始めるとき
他のプロジェクトを取り込みたい時

git clone 取得元レポジトリ
(完全に新規でない時、調整したい時は
git init , remote add, git pull のセットを
それぞれ順にやってもいい)



これぐらいでしょうか。


Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

30 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です