「開発効率をUPする Git 逆引き入門」のメモ

図書館でこのような本を借りたので,
Gitをちゃんと勉強してこなかった私のメモ.

とっても読みやすくてわかりやすかった.
問題はこの後自分がどれだけ使っていけるかだと思う.

*Gitの基礎知識*

・Gitはバージョン管理システムである
・他にもCVSとかSubversionといったものが存在する
・集中型バージョン(リポジトリはリモートだけ)管理システム:CVS,Subversion
・分散型バージョン(リポジトリをリモートとローカルで持つ)管理システム:Git
・作業ディレクトリ、ステージング・エリア、Gitディレクトリの3つのデータ領域がある

*Gitを使った作業の流れ*

① 作業ディレクトリへ移動
② Gitリポジトリを作成(git init)
[リポジトリの状態の確認(git status)←適宜必要な時に]
④ Git管理するファイルをステージング・エリアに登録(git add [file])
⑤ ステージング・エリアに登録された内容を
Gitディレクトリに登録(git commit -m “[message]”)
⑥ ファイルを編集
⑦ 変更をステージング・エリアに登録(git add [file] or git add .)
⑧ ⑦をローカルリポジトリに登録(git commit -m “[message]”)

*Gitの設定*

Gitの設定ファイルは3種類存在する.
設定ファイル 変更するためのコマンド
/etc/gitconfig git config –system <引数>
~/.gitconfig(アカウント毎の共通設定) git config –global <引数>
各プロジェクト内の .git/config git config <引数>
設定例)

・ユーザ情報の登録
Gitでコミットを行う際は,ユーザ情報が必要となるので登録してみる.


・コマンドのエイリアス登録
長いコマンドとかをエイリアス登録して使いやすくする.


*Gitの準備と基本操作*

・1からリポジトリを作りたい
(シチュエーション)
リポジトリを作成したいとき。


・既存のリモートレポジトリを使いたい
(シチュエーション)
既存のリモートレポジトリの複製をローカル環境に作成したいとき。


・ファイルの状態を確認したい
(シチュエーション)
ステージング・エリアに登録したいファイルや,次回コミット時に変更履歴として
Gitで管理されるファイルを確認したいとき。


・変更内容をステージング・エリアに登録したい
(シチュエーション)
新しいファイルや,変更されたファイルの内容をステージング・エリアに登録したいとき。


・ステージング・エリアの変更内容をコミットしたい
(シチュエーション)
ステージング・エリアの内容をGitディレクトリに登録したいとき。
・ステージング・エリアの変更内容を取り消したい (シチュエーション) ステージング・エリアにaddしてしまった内容を取り消したいとき。

・ファイルをGit管理から削除したい
(シチュエーション)
作業ファイルのファイルから特定のファイルを削除しても,
ステージング・エリアのファイルは削除されないので,
ステージング・エリアに対し削除情報を登録したいとき。
(尚、Gitディレクトリには過去のリポジトリを保つためファイルは削除されない)


・ファイル名を変更したい
(シチュエーション)
ファイル名を変更したり,ファイルを移動したりしたいとき。


・Git管理していないファイルだけ削除したい
(シチュエーション)
Git管理していない作業ディレクトリ上のファイルを削除したいとき。


・Git管理の除外対象ファイルを設定したい
(シチュエーション)
*.logや*.bakなどリポジトリの管理から除外したいファイルを設定したいとき。
ここを参考に編集するのがいい


・Git管理しているファイルを後から除外対象に設定したい
(シチュエーション)
一度ステージングエリアに登録していしまったファイルを,
後から除外対象ファイルに設定したいとき。


・除外対象に設定されているファイルをステージングエリアに登録したい
(シチュエーション)
除外対象のファイルを強制的にステージングエリアに登録したい場合。


・空のディレクトリをGit管理したい
(シチュエーション)
事前に空のディレクトリを準備しておいて,
都度Git管理するファイルを増やす形を取りたいとき。


・変更内容を一時的に退避したい
(シチュエーション)
Git管理されているファイルをちょこっといじってみたいだけで,
いちいちその変更をリモートリポジトリに反映させたくないとき。
stashという領域を用いてそこに退避させておくイメージ。


*リポジトリの操作*

・リポジトリを変更履歴の状態に戻したい
(シチュエーション)
現在の状態を特定の変更履歴に戻し,そこからまた異なる変更をしていきたい場合。


・特定のファイルを指定した変更履歴の状態に戻したい
(シチュエーション)
特定のファイルを指定した変更状態に戻したい場合。


・特定のファイルを過去の変更履歴から完全に削除したい
(シチュエーション)
パスワードが記載されたファイルを履歴に含めてしまうと,
対象ファイルを削除したとしても履歴に残ってしまい,
そこから復元されてしまう。
過去の変更履歴を含めてファイルを完全に消去したい場合。


・間違えて戻してしまった変更履歴を元に戻したい
(シチュエーション)
git reset –hard などを誤って実行してしまい,
意図せず変更履歴を戻してしまったとき。


・特定の変更履歴の内容をなかったことにしたい
(シチュエーション)
変更履歴に問題が見るかり,その変更自体をなかったことにしたい場合。
git reset との一番の違いは特定の変更履歴をなくすためのコミットを作る点。


・複数の変更履歴を1つにまとめたい
(シチュエーション)
複数の変更履歴を1つにまとめて整理したい。


*ブランチとタグの操作*

・新しいブランチを作成したい
(シチュエーション)
複数人で同じプロジェクトを扱うときに,目的毎にブランチを作成したいとき。


・ブランチの一覧と現在のブランチを表示したい
(シチュエーション)
ブランチの一覧を表示したい、現在のブランチを表示したいとき。


・ブランチ名を変更したい
(シチュエーション)
ブランチ名を変更したいとき。


・ブランチを削除したい
(シチュエーション)
ブランチを削除したいとき。


・他のブランチに切り替えたい
(シチュエーション)
現在作業中のブランチを他のブランチに切り替えたいとき。


・ブランチをマージしたい
(シチュエーション)
ブランチをマージしたいとき。


・ブランチをリベースしたい
(シチュエーション)
マージのように新たな変更履歴を作らずに、ブランチを統合したい。


・他のブランチの一部変更履歴を取り込みたい
(シチュエーション)
git merge や git rebase だと対象のブランチの変更履歴を全て取り込んでしまう。
全てではなく,一部だけを取り込みたいとき。


・コンフリクトを解消したい
(シチュエーション)
マージを行うと
①マージ後の変更内容を作成
②作成した変更内容をコミット
という2つの処理が自動的に行われる。
コンフリクトが起こると①だけが行われ,
変更内容はステージングエリアのみに登録された状態となる。
マージを完了させるには,①で作成された変更内容を手作業で修正し,
コンフリクトを解消する必要がある。


・新しいタグを作成したい
(シチュエーション)
新しいタグを作成したいとき。


・タグを削除したい
(シチュエーション)
タグを削除したいとき。


*リモートリポジトリの操作*

・リモートリポジトリの情報を確認したい
(シチュエーション)
リモートリポジトリの情報を確認したいとき。


・リモートリポジトリを追加・削除したい
(シチュエーション)
複数のリモートリポジトリと連携して,それぞれのリモートリポジトリに対して
変更履歴を反映したり,取り込んだりするとき。


・リモートリポジトリの設定内容を変更したい
(シチュエーション)
リモートリポジトリの設定を変更したいとき。


・リモートリポジトリの変更内容を取り込みたい
(シチュエーション)
リモートリポジトリの変更内容を取り込みたいとき。


・ローカルリポジトリの変更をリモートリポジトリに反映したい
(シチュエーション)
ローカルリポジトリの変更履歴をリモートリポジトリに反映したいとき。


・ローカルリポジトリに作成したタグをリモートリポジトリに反映したい
(シチュエーション)
ローカルリポジトリに作成したタグをリモートリポジトリに反映したいとき。


・リモートリポジトリ上のブランチを削除したい
(シチュエーション)
リモートリポジトリ上のブランチを削除したいとき。


・リモートリポジトリ上のタグを削除したい
(シチュエーション)
リモートリポジトリ上のタグを削除したいとき。


・リモートリポジトリ上で削除されたブランチやタグをローカルリポジトリに反映したい
(シチュエーション)
リモートから削除しても,ローカルには反映されずブランチやタグが残ったままになってしまう。
ローカルからも削除したいとき。


*リポジトリ内を調べる*



*困った時の対応*

・誤ってファイルを削除してしまった


・ローカルリポジトリの変更をリモートリピジトリに反映できない


・直前のコミットメッセージを間違ってしまった