Gitを使っていない職場に就職しましたが、今後仕事でも使っていきたいのでちゃんと勉強して周りに勧めたいと思います。
個人的にバージョン履歴を残すのに使っていた程度だったので、使ったことなかったものが多々ありました。
目次
初期設定
名前とアドレスの設定
Gitの使用を始める前に、まず自身の名前とアドレスを設定する。
-
--global
をつけると、デフォルトがこの設定になる。
つけなければ実行した階層のリポジトリに対しての設定になる。
git config --global user.name name
git config --global user.email email@sample.com
改行コードの自動変換を無効化
職場のWindowsでVisual Studio搭載のGitを使ったところ、改行コードの変換メッセージが出たので設定。
Gitをインストールする際に設定があるようだが、こちらで必ず設定するようにしたほうが安全か。
git config --global core.autocrlf false
ローカルリポジトリの初期化
新たに作成する場合
プロジェクトフォルダに移動して、初期化をする。
mkdir MyProject
cd MyProject
git init
リモートに存在する場合
すでにリモートに存在しているプロジェクトであるならば、cloneでダウンロードすることができる。
cloneした場合は今いる階層にリポジトリ名のフォルダが生成される。
GitHubなどであればリポジトリを開いてCodeのところからclone用のURLが取得できる。
git clone git@github.com:name/project.git
ファイルの追加
指定したファイルを追加
ファイルを一つずつ追加する場合。
git add index.html
配下のファイルを全て追加
カレントディレクトリ以下のファイルを一括で追加することができる。
git add .
ただし、追加する必要がないものまで入ってしまうので、使う際には次の点に注意が必要。
- 隠しファイル含めて、不必要なファイルは存在していない
- .gitignoreを適切に設定していて、不必要なファイルが含まれることがない
条件に一致するファイルのみ追加
アスタリスクをワイルドカードとして使用できるので、条件を指定して一気に登録ができる。
例として、拡張子がhtmlのものすべてを追加する場合は次のように実行できる。
git add *.html
削除、変更のあったファイルを全て追加
新規追加したファイルは追加せず、削除や中身の変更があったものを全て追加する。
git add -u
コミット
コミットすることで、その時の状態を保存できる。
コミットにはメッセージを登録し、いつ誰が何のために変更したのかを追えるようになる。
git commit -m "first commit"
コミットの取り消し
間違えてコミットした時に取り消す方法。
コミットIDを調べる
戻る先を指定するために、コミットIDを調べる。
7桁のコミットIDが取得できるのでそれを利用する。
git log --oneline
git reset
まだpushしていなければ、resetを使用してコミットを取り消すことができる。
pushした後にresetをしてしまうと、pushできなくなったりするため使用しない。
オプション
resetにはオプションが3種類ある。
--soft
コミットのみがリセットされる
手元とステージされたファイルはそのままでcommitする前に戻る
addし忘れたファイルがあったなどの時に使える
--mixed
コミットとステージされたファイルがリセットされる
手元のファイルはそのままでaddする前に戻る
addしたくないファイルをaddしてしまったなどの時に使える
オプションを省略した場合はmixedとなる
--hard
手元のファイルまで全てがリセットされる
指定したコミットの状態に完全に戻る
全ての作業をなかったことにしたい時に使える
使用例
以下の例は戻りたいコミットIDが7b9faf5だった場合で、softオプションを指定。
git reset --soft 7b9faf5
reflogでresetをreset
間違えてresetしてしまった時は、reflogを使用してresetしたことをリセットする。
git reflogを実行すると、resetを含めてログが出力されるので、戻りたい場所を
HEAD@{1}
といった形で指定してresetをする。
git reflog
7b9faf5 (HEAD -> main) HEAD@{0}: reset: moving to 7b9faf5
7020fee (origin/main) HEAD@{1}: commit: add main.py
7b9faf5 (HEAD -> main) HEAD@{2}: clone: from github.com
git reset --hard HEAD@{1}
git revert
pushしてしまったあとにコミットを取り消したい場合はrevertを使用する。
指定したコミットへ戻るコミットを行う。
git revert 7b9faf5
revertを実行すると、コミットメッセージを編集するためにエディタが開くので、必要であればコメントを修正する。
直前のコミットを修正する
直前のコミットを修正するならresetなどをしなくても修正が可能。
追加し忘れたファイルがある場合は、addしてから実行すれば追加できる。
また、コメントメッセージの修正も行うことができる。
git commit --amend
リモートにプッシュ
cloneした場合は自動的にリモートリポジトリが紐付いている。
次の例はGitHubで作成したリポジトリをcloneして、リモート名はorigin、ブランチ名はmainとなっている場合の例。
この先で出てくる例も同様にoriginとmainを使用していく。
git push origin main
リモートが登録されていない場合
cloneしていない場合、リモートを設定する必要がある。
次の例はリモート名をorigin、接続先はGitHubとした場合の例。
接続先URLはcloneする場合と同じもの。
git remote add origin git@github.com:name/project.git
リモートから取得
取得するだけ
fetchを使用すると、リモートの情報を取得できる。
ローカルリポジトリに反映する場合は、mergeをする必要がある。
git fetch origin main
更新まで
pullを使用すると、fetchしたあとにmergeを実行するのと同じことを1コマンドで行える。
ローカルリポジトリが書き換えられてしまうので使用には注意が必要。
git pull origin
ブランチの切り替え
ブランチを作成して切り替える
issue01ブランチを作成して切り替える場合の例。
git switch -c issue01
既存のブランチに切り替える
mainブランチに戻る場合の例。
git switch main
ブランチをマージする
mainにissue01の変更内容を反映する場合の例。
issue01に修正をした後、mainにswitchしてから次のコマンドを実行する。
git merge issue01
マージする際にコミットをまとめる
単なるmergeではコミット履歴が煩雑になるといった理由がある場合、squashオプションを付けることでブランチを切った後のコミットをまとめて1つにしてからマージできる。
git merge --squash issue01
ブランチを削除する
不要になったissue01ブランチを削除する場合の例。
git branch -d issue01
おわり
全部は書いてないけどある程度なら使えるはず。
必要に応じて適宜追加していく予定。