ドキドキしないためのGit解説 第2弾!
第2弾はGitの操作について、説明していきます。
実際に使用する操作を学んで、Gitへのドキドキを鎮めていきましょう。
今回取り扱うGit操作は、以下の通りです。
1.clone
2.add
3.commit
4.push
5.pull
6.fetch
7.stash
8.branch
9.tag
10.merge
11.cherry-pick
12.rebase
13.revert
14.reset
リポジトリの操作
1.clone リモートリポジトリをまるっとコピーし、自分のPCにローカルリポジトリを作成します。プロジェクトを開始する際に使用することが多いです。
$ git clone [コピーするリポジトリのURL]
2.add 変更したファイルをインデックス(ステージングエリア)へ追加します。
「ファイルを変更した!変更を保存したい!」となったら、初めにする操作です。
$ git add . <=全ファイルをadd
$ git add [ファイル名] <=指定したファイルをadd
$ git add -u <=変更したファイルをadd
3.commit ファイルの変更履歴をローカルリポジトリへ登録します。
$ git commit -m "[コミットメッセージ]"
4.push ローカルリポジトリの内容をリモートリポジトリへ反映します。
「変更した内容を他の人にも共有したい!」ときに使用します。
$ git push [リモートリポジトリ名] [ローカルリポジトリ名]
5.pull リモートリポジトリのデータを取得し、ローカルリポジトリへ統合します。
「他の人が変更した内容を自分の環境にも取り込みたい」「ファイルを最新の状態にしたい!」ときに使用します。
$ git pull [リモートリポジトリ名] [ローカルリポジトリ名]
6.fetch ローカルリポジトリでリモートリポジトリのデータを取得することができます。
データの取得のみ行うので、ローカルリポジトリへの影響はありません。
「リモートリポジトリの状態が知りたい!」ときに使用します。
$ git fetch [リモートリポジトリ名]
7.stash コミット前の内容を一時的に退避させることができます。
「ブランチ移動の際にコミットを要求される。でもまだコミットはしたくない。でもでも今の作業内容を捨てたくもない」という葛藤に見舞われた際に使用します。
$ git stash <=一次待避
$ git stash apply <=最新の作業を復元
$ git stash apply stash@{N} <=N番目の作業を復元
$ git stash clear <=スタッシュを全削除
ブランチの操作
8.branch ブランチとは、コミット履歴の流れを分岐して記録していくための機能です。分岐したブランチは他のブランチの影響を受けない独立した環境を持つことができるため、1つのプロジェクトで複数の変更を同時に進めていくことができます。
$ gir branch [ブランチ名] <=ブランチを新規作成
$ git checkout [既存ブランチ名] <=ブランチを切り替える
$ git branch -d [ブランチ名] <=ブランチを削除する
9.tag 特定のコミットに名前をつける機能です。
リリースのタイミングで付与することが多いです。
$ git tag [タグ名] <=タグ作成
$ git tag -a [タグ名] -m “[メッセージ]" <=メッセージ付タグ作成
$ git tag -d タグ名 <=タグを削除する
10.merge 分岐したブランチと分岐元のブランチを統合することができます。
分岐したブランチのコミット履歴は取ってこないので、分岐元のブランチにはマージした記録のみ残ります。
$ git merge [分岐元のブランチ名]
11.cherry-pick 別ブランチの特定コミットのみを取り込むことができます。
「1つ以上の既存のコミットを指定し、そのコミットが持つ変更を含む新しいコミットを作成」しています。
$ git cherry-pick [コミットのハッシュ値]
12.rebase 分岐したブランチと分岐元のブランチを統合することができます。
分岐したブランチのコミット履歴を取ってくるので、分岐元には分岐したブランチの履歴も記録されます。
$ git merge [分岐したブランチ名]
13.revert 既存のコミットを取り消します。
「取り消したいコミットに対して、それを打ち消すコミットを新しく作成」しているので、取り消したよ!というコミットログを残すことができます。
上の図でいうと...B branchにて「(b)のコミットを消したい...(a)の頃に戻りたい...」となったとします。「revert」では(b)を消すのではなく、(b)を打消すコミットを作成して(a)の状態にします。
$ git revert [コミットのハッシュ値]
14.reset 既存のコミットを取り消します。
resetはrevertと違い、「取り消したいコミットを削除」してしまうので、取り消したよ!というコミットログが残りません。
他の人とのコミット履歴がズレてエラーが発生する可能性が高まるため、チーム開発では極力使用しないほうが良い操作です。
上の図でいうと..B branchにて「(b)のコミットを消したい...(a)の頃に戻りたい...」となったとします。「reset」では(b)を削除して、(a)の状態にします。
$ git reset --soft [コミットのハッシュ値] <=指定したコミットを削除
$ git reset --mixed [コミットのハッシュ値] <=指定したコミット、インデックスを削除
$ git reset --hard [コミットのハッシュ値] <=指定したコミット、インデックス、ワーキングツリーを削除
最後に
今回はGitの操作について解説していきました。Gitの操作を調べていく中で最初に感じたことは「SVNと比べて操作することもできることも多いな」でした。
しかし、Git特有の豊富な機能や操作があるおかげで、バージョン管理していく上で発生する多くの「困った!どうしよう!」に対応できるようになった気がします。
(その分理解することが多く、操作する前やミス操作したときに「困った!どうしよう!」とはなりますが...)
さまざまな開発環境に対応していけるようこれまで以上にGitの理解を深めていきたいと思います。
<参考サイト様> サル先生のGit入門〜バージョン管理を使いこなそう〜