エンジニアになった元数学教師の記録

Gitを使用する際の流れ(個人向け)

December 24, 2023 02:37
July 19, 2024 00:35

概要

Gitを個人で使用してコード管理する際に、少し使わなかったら「どう言う流れでpushするんだっけ?」となってしまうのでその流れを記録するための備忘録として残しておきます。

なお、今回はGitHubを利用しますが、CLI操作がメインなのでGitHubでなくても問題ないと思われます。

gitコマンド

一連の流れ

コマンド

動作

1git clone ${リモートリポジトリのURL or SSHパス}

リモートリポジトリに接続し、ローカルリポジトリを
作成後リモートリポジトリ内のファイルをダウンロードする。
(リモートリポジトリに何もなければただ接続するだけ)

GitHubならCode内にパスが記載されているのでこちらを利用

1git init (${ディレクトリ名})

git cloneを既に実行している際には不要

現在のディレクトリ(もしくは指定したディレクトリ)内に.gitを隠しフォルダとして作成し、ローカルリポジトリとする。

1git remote add ${任意のリモートサーバ名} ${リモートリポジトリのURL or SSHパス}

指定したリモートリポジトリに接続する。

リモートサーバ名は何でもよいが、基本はoriginとして命名されることが多い。
ここでリモートリポジトリのURL or SSHパスをoriginと命名している。(エイリアス的なイメージ)

1git add ${ファイル名1} ${ファイル名2} ・・・

もしくは

1git add .

指定したファイルをステージング状態(Gitによって管理されている状態)にする。

ファイルを編集するたびにこのコマンドを実行し、ステージング状態を維持する。


ファイル名ではなく「.」を指定することで、リモートリポジトリ内のファイルをすべてステージング上にすることができる。

1git status

Gitの現在の状況を表示する。

ステージング状態でないと赤色で表示される
ステージング状態だと緑色で表記される

1git commit -m "${コメント}"

Gitに保存すると同時に、コメントを付ける。

基本git addとセットで実行する。

コメントする際には「"」は付けておく

1git branch -M ${作成したリモートブランチ名}

現在のローカルブランチ名をリモートリポジトリ名に(強制的に)変更する。

最近になってリモートの上流リポジトリをmainで作成することが増えてきたのに対し、ローカルではmasterとなっていることがあるため実行しておかないといけないコマンド。ローカルブランチがmainであれば実行の必要はない。

1git push ${リモートサーバ名(origin)} ${pushしたいリモートブランチ}

リモートサーバ名に何を設定しているかはgit remote -vで確認できる。

リモートリポジトリにローカルリポジトリのファイル群をcommit時に追加したコメント内容とともに同期する。

1git checkout ${切り替え先のブランチ}

ブランチを切り替える

-b ${新規ブランチ名}:指定したブランチを作成し、同時にそのブランチに切り替える

git branchでブランチを確認できる。

git bashなら現在のブランチを確認できる

知っておくと役に立つコマンド

コマンド

動作

1git remote -v

現在ローカルリポジトリと紐づいているリモートリポジトリ先を表示する。

ここで出力されるoriginこそがコマンド内でのoriginの正体
1git remote remove ${リモートサーバ名(origin)}

接続しているリモートリポジトリから切断する。

1git branch

リモートブランチの一覧を表示する。

-r:リモートブランチの一覧を表示する
-d ${ブランチ名}:マージ済みのローカルブランチを削除する
-D ${ブランチ名}:ローカルブランチを強制的に削除する
-vv:現在のリポジトリのコミット番号・アップストリームブランチ・コミットメッセージを表示する

「* main コミット番号 [アップストリームブランチ] コミットメッセージ」の順
1git log

現在のローカルリポジトリでのコミット履歴を確認する

--oneline:各コミットログを1行のみ表示する

1git push --delete origin ${リモートブランチ}
1git push origin :${リモートブランチ}

リモートブランチを削除する

1git merge

現在のブランチに指定したブランチをマージ(合流)を行い、反映させる。

1git config --list
1git config --global --list

現在の設定情報を表示する。

--global:グローバルな設定情報(すべてのリポジトリに共通な設定情報)を表示する

1git config --global init.defaultBranch main

ローカルリポジトリの上流リポジトリ名をmainに変更する。

このコマンドでも変更されていなければ、git config --edit --system で直接init.defaultBranchを編集する。

コミットを取り消すコマンド

コマンド

動作

1git revert ${コミットID}

指定したコミットIDのコミットを削除するコミットを作成する。

このコミットを再度コミットすると取り消されたコミットが戻る。

下記のような書き方も可能

1# コミットをひとつずつ指定
2git revert xxxxxxx yyyyyyy
3
4# コミットを範囲指定
5git revert xxxxxxx..zzzzzzz
1git reset <--soft or --mixed or --hard> ${コミットID}

指定したコミットのリセット行う。

--soft:commitのみリセット
--mixed:commitとaddをリセット
--hard:commit, addに加えてワークディレクトリ(ファイルの変更内容)もリセット

リモートリポジトリに反映するには下記コマンドにて強制プッシュを行う。

1git push origin ${ブランチ名} --force

ややこしいコマンド

コマンド

動作

1git fetch origin
1git fetch origin main

リモートリポジトリから最新の状態をローカルリポジトリの「アップストリームブランチ(多くはorigin/main)」に反映させる。

(ブランチ名を書かなければリポジトリごと、ブランチ名があればそのブランチのみ反映させる。)

ローカルリポジトリのmainブランチに反映されるわけではないことに注意

1git pull origin
1git pull origin main

リモートリポジトリから最新の状態をローカルリポジトリの「mainブランチ」に反映させる。

(ブランチ名を書かなければリポジトリごと、ブランチ名があればそのブランチのみ反映させる。)

origin/mainブランチとmainブランチの違い

※下記サイトが分かりやすかったので引用しました。
pukiwiki

3つのmainブランチ

実は単にmainブランチといっても3種類存在している…らしい。

というのも

  • リモートリポジトリ側のmainブランチ
  • リモートリポジトリを追跡するmainブランチ
  • ローカルリポジトリ側のmainブランチ

というのがあり、2つ目の「リモートリポジトリを追跡するmainブランチ」のことをアップストリームブランチ(origin/mainブランチ)と呼びます。
※リポートリポジトリ側とローカルリポジトリ側には特に変わった呼び方はないみたいなので、ここではmain(リモート)、main(ローカル)と呼ぶことにします。

origin/main(アップストリーム)ブランチはローカル側に存在している

git fetchを実行したときにはローカルのリポジトリには反映されないものの、アップストリームブランチであるorigin/mainブランチに反映されているということになります。

ここからmain(ローカル)に反映させるには下記コマンドを実行すればよいです。

1git merge origin/main

git fetchは要るの?

そうするとわざわざgit fetchしてgit mergeという面倒な工程を踏むぐらいだったら、git pullの方で一発で済ませたらと思いそうになりますが、そうは問屋が卸さないらしいです。
git pullを実行すると編集によってはコンフリクト(衝突)が起こってしまい、その際は手動で修正を加える必要があるため、git fetchは必要とかなんとか…