Loki's Note

色々なことに手を出して迷子中の私のための記録

【Git】自分用チートシート

post-featured-image

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

おわり

全部は書いてないけどある程度なら使えるはず。

必要に応じて適宜追加していく予定。

参考にさせてもらったサイト