🆙

Git/GitHubコマンドの入門

に公開
  • 自分用のGit/GitHubのコマンドのノート
  • VSCodeなどのGUIバージョン機能を使わずに、コマンドのみを使うことを想定
  • Git操作には英単語を多用している。本文では混乱を避けるためカタカナ語より英単語をそのまま使うことが多い

前書き

Gitは分散型 バージョン管理システム(VCS) そのものであり、GitHubはそのGitを利用したホスティングサービスである。

ソースコードを保存する倉庫のことを リポジトリ(repository) と言い、略して リポ(repo) とも呼ばれる。

その中でもローカル環境(自分のPC)に保存している ローカルリポ(local repo) とリモート環境(GitHubのようなSaaSサービス)に保存してる リモートリポ(remote repo) に分かれる。

ソースコードをローカル環境からリモートレポにアップするまでには以下のような段階がある:

  • commit候補前
  • commit候補
  • ローカルリポ
  • リモートリポ

まず以下のコマンドを覚えておこう

commit候補前の状態からcommit候補にするには、git add .
commit候補からローカルリポに保存するには、git commit -m "<メッセージを記入>
ローカルリポの変化をリモートリポに同期するには、git push

安全的にソースコードのバージョンを管理したい場合、開発しているソースコードをmainブランチに直接にpushすることをしてはいけない。必ず開発専用ブランチ(例えばdevブランチ)を使って、動作に問題ないと確認できたらdevブランチの内容をmainブランチにマージすること。

よくあるタスク

新規から一般操作

基本操作

個人開発の場合、ソースコードをローカル環境からリモートリポジトリにアップロードまで一般的な流れ:

# git環境を初期化
git init

# プロジェクトのルートフォルダにあるファイルを全てcommit候補にする
git add .

# コードをローカルリポに送る(commit)
git commit -m "<コメントを記入>"


# コードをローカルリポからリモートリポに同期(push)する
# (初回のpush使用は以下のコマンドが必要。)
# (GitHubを使う場合、以下のコマンドを使わず、同期ボタンを押すと、自分のGitHubアカウントのプライベートリポとパブリックリポを選ぶ案内画面が出てくるはず。)
git remote add origin <リモートリポジトリのURL>
git push -u origin main

# 2回目以降にpushするには
git add .
git commit -m "<コメントを記入>"
git push

ブランチの新規

# ブランチdevを新規し、同時に切り替える
git checkout -b dev

git add .
git commit -m "<コメントを記入>"

# ブランチにあるコードをアップ(push)する、初回は`-u origin dev`が必要
git push -u origin dev

# (2回以降にブランチにあるコードをアップ(push)するには)
git push

やり直し系

最後のcommit+push両方をキャンセル

強制的に戻すため、個人開発はok、チーム開発での使用はNG

git reset --hard HEAD~1
git push --force

ちなみに、最後のreset --hard HEAD~1コマンドのキャンセル

git reset --hard HEAD@{1}

mainブランチに何らかのトラブルがあり、devブランチからそのままmainにクーロンしたい

強制的に変更するため、個人開発はok、チーム開発での使用はNG

git checkout main
git reset --hard dev
git push origin main --force

mainの中の元の情報が全部失われるため、要注意

push済みの最後のcommitメッセージを変更

強制的に変更するため、個人開発はok、チーム開発での使用はNG

git commit --amend -m "<新メッセージ>"
git push --force

マージ系

シナリオ1:devブランチの変更点をmainブランチに反映させる(merge)。変更がmainブランチにない(最も簡単な場合)

merge前

*----A----B  ← dev
       \
        C  ← main

merge後

*----A----B  ← dev
       \    \
        C----M  ← main

この状況をfast-forwardという。

# devブランチにcommit+pushを完了した場合
git checkout main

# リモートリポにある最新のmainブランチをローカルリポにダウンロード(pull)する
# (個人開発/1つPCでの操作の場合にしなくてok、チーム開発/複数PCでの作業は必須)
git pull origin main

# devブランチにある変化点をmainブランチにアップデート(merge)させる
git merge dev

# ローカルリポにあるmainブランチの変化をリモートリポに同期(push)する
git push origin main

シナリオ2:devブランチの変更点をmainブランチに反映させる(merge)。何らかの状況があった

git checkout main

# リモートリポにある最新のmainブランチをローカルリポにダウンロード(pull)する
# (個人開発/1つPCでの操作の場合にしなくてok、チーム開発/複数PCでの作業は必須)
git pull origin main

# devブランチにある変化点をmainブランチにアップデート(merge)させる
git merge dev

下記のようにVimエディターに内容が表示される場合

Merge branch 'dev'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.

デフォルトのメッセージが良ければ
:wqで保存しエディターを終了させる

(オプショナル: マージのメッセージをカスタム化したい)

  • カーソルを1行目に移動させる
  • iを押すと、編集可能になる。deleteキーも使えるはず
  • escを押すと、編集完了になる
  • :wqで保存しエディターを終了させる

続けて次のコマンドを使用

# ローカルリポにあるmainブランチの変化をリモートリポに同期(push)する
git push origin main

Discussion