Gitまとめ
チェックアウト
今いるコミットを移動する。
ブランチを移動するときにも使う。
git checkout コミットID
今時分がいるブランチは「*」をつけて表す。
フォーク・クローン
フォーク
他の人が公開しているリモートリポジトリを、自分のアカウントにコピーすること。
クローン
リモートリポジトリを自分のPC(ローカル)にダウンロードすること。
git clone リモートリポジトリのURL
※ただし実際の開発現場では、フォークせずに1つのリモートリポジトリを複数人が直接クローンして作業することが多い。不用意にリポジトリが分散するのを防ぐため。
マージ
ブランチを取り込むこと。
マージはコミットで表される。
# ブランチAにブランチBを取り込む
git checkout ブランチA # マージコミットを作りたいブランチに移動
git merge ブランチB
push
ローカルリポジトリで起きた変更をリモートリポジトリに反映する。
git push リモートリポジトリ名 ブランチ名
pull
リモートリポジトリで起きた変更を、ローカルリポジトリに反映する
git checkout プルしてきたいブランチ
git pull リモートリポジトリ名 ブランチ名
revert
過去のコミットを打ち消す。
コミット自体を削除するわけではなく、あくまで反対の内容で新規コミットを作ることで過去の変更を打ち消す。
あいだに別のコミットが存在しても、rebertは可能。
git revert コミットID
rebase
履歴を一直線にする。
mergeとrebaseの違い
- merge:過去のコミットは改変されずに、マージするためだけの新しいコミットが作成される
- rebase:もともとのコミットが改変されてリベース先のブランチに乗っかり、履歴が一直線になる。
※ rebaseは履歴を改変する。コミットを新しく作り直すため、rebase前後でコミットIDがかわってしまう。
リモートリポジトリ上に存在しているブランチをrebaseしてしまうと、普通の方法ではpushできなくなる。
git checkout リベースしたいブランチ
git rebase リベース先のブランチ
リモート追跡ブランチ
リモートブランチとローカルブランチの間にある。
ローカルリポジトリ内にあり、リモートブランチをローカルにコピーしただけのもの。
読み取り専用。
fetch
リモートリポジトリから最新の状態を取得し、ローカルリポジトリ内のリモート追跡ブランチを更新する。
リモートリポジトリの状況は知りたいけど、まだローカルブランチに反映させたく内場合などに使用。
fetchしただけだと、リモート追跡ブランチ(origin/◯◯)にコミットがダウンロードされただけで、ローカルブランチは更新されていない。
ローカルブランチに反映させたくなったら、リモート追跡ブランチをmergeする。
git checkout main
git featch
git merge origin/main
prune
リモートリポジトリで既に削除されたブランチを、ローカルリポジトリでも削除する。
git branch -a # リモート追跡ブランチを含めたすべてのブランチを確認する
git fetch --prune # リモートリポジトリで消えた追跡ブランチを消去する
git branch -d ブランチ名
最新のコミットメッセージを修正する
コミットメッセージをタイポなどしてしまった場合は、amendを使う。
push前なら修正できる。
git commit --amend # viが立ち上がり、直近のコミットメッセージを修正できる。
別ブランチから特定のコミットのみ取り込む(チェリーピック)
Aブランチにコミットするはずが、間違えてBブランチにコミットしてしまった場合などに使用。
任意のコミットを、今いるブランチ上にコピーしてこれる。
git cherry-pick コミットID # 今いるブランチにコミットをコピー
※ あくまで特定のコミットを今いるブランチにコピーしてくるだけ。元のコミットは残ったまま。
元のコミットを削除するには
間違えて作成した元のコミットを打ち消したい場合はrevertを使う。
コミットに目印をつける(タグ)
タグを使うと、履歴上の重要なポイントに目印をつけることができる。
- アプリ開発で、リリースしたときにバージョン番号のタグを付ける
- 受託開発で、納品したときに日付のタグを付ける
- Web開発で、リニューアルオープンしたときにタグを付ける
# 新規タグを作る
git tag タグ名
# タグをリモートリポジトリに共有する
git push origin タグ名
# ローカルリポジトリのタグを削除する
git tag -d タグ名
# リモートリポジトリのタグを削除する
git push origin --delete タグ名
間違えてHEADに直接コミットしてしまったら
detached HEAD状態
どのブランチにも所属しない無所属状態のコミット。
過去のコミットにチェックアウトし、そのまま新しくコミットを作成した場合などに起こる。
そのままコミットを積み重ねることもできるが、次にチェックアウトしたときに目印がないため戻ってこれなくなる。
detachd HEAD状態は、HEADが直接コミットを指してしまっている状態
一見ちゃんとコミットできているように見えるが、masterブランチにチェックアウトしてみると
コミットDがなくなってしまう。
対処法
HEADに直接コミットし、detaced HEAD状態になっていることに気付いたら、慌てずそこから新規ブランチを作る。
git checkout -b ブランチ名