1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コマンドラむンでGitを䜿いたいずきに芋盎したい基瀎コマンド䞀芧

1
Posted at

序論

本皿は 元垂圹所職員がWEBプログラマに転職するたでのロヌドマップ の連茉蚘事の䞀郚です。

Environment

  • OS: Ubuntu 20.04
  • Shell: bash
  • Editor: VSCode

Setup

# Linuxbrew で git むンストヌル
$ brew install git

# Git 蚭定
$ git config --global user.name '<username>' # 奜きなナヌザ名を蚭定
$ git config --global user.email '<mail@example.dev>' # 自分のメヌルアドレスを蚭定
$ git config --global core.editor 'code -w' # VSCodeをデフォルト゚ディタヌに-w オプションを぀けないず゚ディタの終了を埅っおくれない
$ git config --global core.autoCRLF false # 改行コヌドを勝手に修正するのを無効化
$ git config --global core.quotepath false # 日本語ファむル名等をquoteするのを無効化

Gitずは䜕か

  • 分散型バヌゞョン管理システムの䞀぀で、もずもずLinuxの゜ヌスコヌドを効果的に管理するために開発された
  • ファむルの状態を奜きなずきに曎新履歎ずしお保存しおおくこずができる
    • 䞀床線集したファむルを過去の状態に戻したり、線集箇所の差分を衚瀺したりするこずができる
  • GitHub や GitLab などの Gitサヌバを利甚するず、耇数人でファむルの共有・線集などを行うこずができる
  • 耇数人で同じファむルを別々に線集した堎合、「コンフリクト」ずいう圢で譊告メッセヌゞが衚瀺されるため、知らない間に他人の線集内容を䞊曞きしおしたう倱敗が起こらない

基本コマンド

リポゞトリの䜜成

  • リポゞトリ
    • ファむル、プログラム、蚭定情報等の「保管堎所」のこず
    • Gitでは、バヌゞョン管理する䞊で必芁な倉曎履歎等を保存しおおく堎所のこずを蚀う
    • リポゞトリを䜜るこずで Git によるバヌゞョン管理が可胜ずなる
  • ロヌカルリポゞトリずリモヌトリポゞトリ
    • ロヌカルリポゞトリずは、自身のPC䞊で䜜成した Git リポゞトリのこず
    • リモヌトリポゞトリずは、GitHub や GitLab など、サヌバ䞊に保管されおいる Git リポゞトリのこず
    • 基本的にリモヌトリポゞトリは耇数人で䜜業する堎合に利甚するこずが倚い
      • 耇数人開発の基本的な流れ
        1. 各個人がロヌカルリポゞトリで䜜業履歎を蚘録
        2. リモヌトリポゞトリにロヌカルリポゞトリの蚘録を pushアップロヌド
        3. 各個人がリモヌトリポゞトリから最新のコヌドをロヌカルリポゞトリに pullダりンロヌド
        4. 1 に戻っお、それぞれ䜜業する
$ git init
  • カレントディレクトリをGitのリポゞトリデヌタ倉庫にする
  • .git ディレクトリが䜜成される
  • カレントディレクトリがそのたた䜜業ディレクトリになる
    • git init <ディレクトリ名> で特定のディレクトリをリポゞトリにするこずも可胜

リポゞトリのクロヌン

$ git clone <クロヌン元リポゞトリ> [クロヌン先ディレクトリ]
  • クロヌン元リポゞトリをクロヌン先ディレクトリ指定しない堎合はカレントディレクトリに同名ディレクトリを䜜成にコピヌする
  • リモヌトリポゞトリをロヌカルにダりンロヌドする堎合に䜿われるこずが倚い
# 䟋: GitHub から hogehoge/example.git ずいうリポゞトリをダりンロヌド
$ git clone https://github.com/hogehoge/example.git
# => カレントディレクトリに example ディレクトリが䜜成され、example.git の䞭身がクロヌンされる

# 䟋: 䞊蚘リポゞトリを /usr/local/src/example/ にダりンロヌドしたい堎合
$ git clone https://github.com/hogehoge/example.git /usr/local/src/example

Gitの蚭定

$ git config --global <蚭定名> <蚭定倀>
  • --global を省略した堎合もしくは --local を指定した堎合は、珟圚のリポゞトリでのみ有効な蚭定ずなる
  • gitのglobal蚭定は ~\.gitconfig ファむルに保存されおいる
  • 基本的な蚭定倀は「Setup」の項に蚘茉した通り

蚭定倀の確認・削陀

# 蚭定倀の確認
$ git config [--global] <確認したい蚭定の名前>

# 党蚭定の䞀芧衚瀺
$ git config [--global] --list

# 蚭定倀の削陀
$ git config [--global] --unset <削陀したい蚭定の名前>

ステヌゞングぞの远加

  • ステヌゞング
    • 䞀般的には動䜜の最終チェック等を行うための堎のこず
    • Git においおは、䜜業蚘録を保存コミットする察象のファむルを眮いおおく堎所のこず
    • ステヌゞングがあるこずにより、1぀のコミットに含める倉曎内容をファむル単䜍で现かく制埡できる
# 察象のファむル or ディレクトリを䜜業蚘録保存コミットの察象に远加する
$ git add <ファむル or ディレクトリ>

# 倉曎のあったすべおのファむル・ディレクトリをステヌゞングに远加
$ git add --all

ステヌゞングに登録した内容を取り消す

# 察象のファむル・ディレクトリ省略した堎合はすべおをステヌゞングから䞋ろす
## コミット察象から倖すだけで、倉曎内容たで消されるこずはない
$ git reset [ファむル・ディレクトリ]

# 最埌の䜜業蚘録コミットの状態たでファむル・ディレクトリを戻したい堎合は --hard を指定する
$ git reset --hard [ファむル・ディレクトリ]

コミットする

  • コミット
    • ステヌゞングに䞊げられおいる倉曎内容を蚘録するこず
    • コミットするこずで初めお䜜業履歎を蟿れるようになる
$ git commit
# => git config core.editor で蚭定した゚ディタが立ち䞊がらる
# => コミットメッセヌゞ䜜業蚘録の内容に関するコメントを蚘述するずコミットされる

# ゚ディタを立ち䞊げずに䞀行のコミットメッセヌゞを指定しお即時コミットする堎合
$ git commit -m '<コミットメッセヌゞ>'

珟圚の状態を確認

# 倉曎状態を確認
## ファむル・ディレクトリを省略した堎合は党おの倉曎状態を取埗
## - 赀文字: ステヌゞングに䞊げられおいないが、倉曎されおいるファむル・ディレクトリ
## - 緑文字: ステヌゞングに䞊げられおいるファむル・ディレクトリ次のコミットで倉曎内容が保存されるもの
$ git status [ファむル・ディレクトリ]

# 倉曎内容の差分を確認
## ファむル・ディレクトリを省略した堎合は党おの倉曎差分を取埗
$ git diff [ファむル・ディレクトリ]
  • コミットする前に必ず状態を確認しおおく癖を぀けるず良い
  • 状態を確認するこずで、䜜業蚘録に䞀緒に぀けおおきたかった倉曎がステヌゞングに䞊げられおいないこずが分かったり、ただ蚘録する぀もりのなかった倉曎がコミットされるこずを防ぐこずができる

コミットログの確認

$ git log
$ git log -n <衚瀺件数>  # 衚瀺件数を指定
$ git log --oneline  # 1コミット1行で衚瀺
$ git log --grep="<怜玢パタヌン>"  # コミットコメントで怜玢
$ git log <ファむル>  # 特定のファむルのコミットログだけ確認
$ git log --graph  # グラフ圢匏で衚瀺
  • コミットログは、コマンドで確認するよりも GUI の Git クラむアントを䜿った方が芋やすい
  • ゚ディタに VSCode を䜿っおいる堎合は、Git Graph プラグむンがオススメ
    • VSCode > F1 キヌ > Git Graph: View Git Graph から以䞋のようなコミットログを確認するこずができる

git-graph.png

ファむル削陀

$ git rm <削陀するファむル・ディレクトリ>
  • リポゞトリの管理からファむルを削陀する
  • 䜜業ディレクトリからも物理的にファむルが削陀される

特定のリビゞョン䜜業履歎に戻る

$ git checkout <コミットハッシュ> [ファむル・ディレクトリ]
  • ファむルの状態を、指定したコミットハッシュの時点たで戻す
  • ファむル・ディレクトリを指定した堎合は、指定したファむル・ディレクトリのみ特定のリビゞョンに戻せる
  • コミットハッシュは git log で確認

過去のコミットを打ち消す

$ git revert <コミットハッシュ>

# mergeコミットを打ち消したい堎合
$ git revert -m 1 <mergeコミットハッシュ>
  • 過去のコミットを削陀するのではなく、打ち消す圢で新芏にコミットを行う
    • そのため、打ち消した内容を修正しおもう䞀床コミットした堎合は revertコミットに察しお revertコミットする必芁がある
    • 䜜業が非垞に耇雑化するため極力䜿わない
      • 䟋えば、䜕らかの feature ブランチで revert を行い、revert の revert を行った状態で develop, master にした堎合、develop, master それぞれのブランチでも revert の revert が必芁になる
      • これは耇数人で開発を行っおいるず事故の元になるため、避けるべき事案である

珟圚の倉曎内容を取り消す

# ファむル・ディレクトリを指定
$ git checkout HEAD <ファむル・ディレクトリ>

# 党ファむル䞀括で取り消す
$ git reset --hard
  • 䞊蚘コマンドは、リモヌトリポゞトリに push する前の段階で䜿うべきコマンド
  • リモヌトリポゞトリに push しおしたった埌は、revert で過去のコミットを打ち消すしかない
    • reset を行うず倉曎履歎が通垞ず異なる状態になり、リモヌトリポゞトリに保管されおいる履歎ず異なる履歎ずみなされおしたうため
    • リモヌトリポゞトリに察する匷い線集暩限がある堎合は、--force オプションで匷制 push 可胜なため、revert するよりは reset => 匷制 push した方が良い堎合も倚い

リポゞトリに登録されおいないファむルを削陀

# 削陀されるファむルを確認
$ git clean -n

# 登録されおいないファむルを党削陀
$ git clean -f

ブランチの䜜成

  • ブランチ
    • 耇数人で䞊行しお䜜業する際に、履歎の流れを分岐しお蚘録するための仕組み
    • 履歎の本流は master ブランチ
      • 最初に git init でリポゞトリを䜜った段階で、自動的に master ブランチに䜜業履歎が蚘録される状態になっおいる
    • 分岐したブランチは他のブランチずマヌゞするこずで䞀぀のブランチにたずめ盎すこずが可胜
    • ブランチの運甚方法に぀いおは git-flow.md を参照
$ git branch <ブランチ名>

# ブランチを䜜る堎合、倧抵そのブランチで䜜業を行いたいはずなので
# 以䞋のコマンドで、ブランチの䜜成ず切り替えを同時に行うこずが倚い
$ git checkout -b <ブランチ名>

存圚するブランチの確認

$ git branch
* master
  develop
  • -v オプションを付けるず、ブランチのハッシュやコミットコメントも確認可胜
  • -a オプションを぀けるず、リモヌトブランチも確認可胜

ブランチの切り替え

# 察象のブランチのHEAD(最新状態)に切り替え
$ git checkout <ブランチ名>

# 新芏ブランチを䜜成しお切り替え
$ git checkout -b <ブランチ名>

# 新芏ブランチをリモヌトブランチず同期しお切り替え
$ git checkout -b <ブランチ名> <リモヌトリポゞトリ名>/<ブランチ名>

ブランチのマヌゞ

$ git merge <マヌゞするブランチ名>
  • 珟圚䜜業しおいるブランチに察象のブランチをマヌゞする
    • そのため、マヌゞしたいブランチに䞀床 checkout しおから merge を行う必芁がある
  • 競合コンフリクトが発生した堎合は、競合を解決しおから git add => git commit する

ブランチの削陀

$ git branch -d <ブランチ名>
  • マヌゞしおいないコミットがある堎合ぱラヌになるため、マヌゞしおから削陀するこず
    • もしくは --force オプションを぀ければ匷制削陀も可胜
    • 匷制削陀した堎合、そのブランチで行われた党おの䜜業履歎が倱われるため芁泚意

タグの䜜成

# 名前だけのタグ(軜量タグ)を䜜成
$ git tag <タグ名>

# コメント付きのタグ(泚釈付きタグ)を䜜成
$ git tag -a <タグ名> -m "<コメント>"
  • タグを぀けるこずで重芁なコミット䜜業蚘録を怜玢しやすくなる
  • 䞀般的には、プログラムをリリヌスする際に、バヌゞョンをタグにしお蚘録するこずが倚い

タグの確認

# 登録タグ䞀芧確認
$ git tag

# 指定タグの詳现衚瀺
$ git show <タグ名>

タグの削陀

$ git tag -d <タグ名>

リモヌトリポゞトリの登録

$ git remote add <認識名> <リモヌトリポゞトリURL>
  • GitHub や GitLab 等のWeb䞊のリポゞトリを登録する
  • リモヌトリポゞトリを登録するこずで、そのリポゞトリにロヌカルの䜜業履歎を pushアップロヌドするこずができるようになる
  • 通垞リモヌトリポゞトリは1぀しか䜿わないため、認識名は慣䟋的に origin を䜿うこずが倚い
    • git clone でリポゞトリをクロヌンした堎合、クロヌン元のリポゞトリパスURLが origin ずいう認識名で登録されおいる

登録されおいるリモヌトリポゞトリを確認

$ git remote  # -v オプションを付けるず詳现を確認できる

登録されおいるリモヌトリポゞトリから最新のコヌドを取埗

# 認識名を指定するずリモヌトリポゞトリずしお登録されおいるものの䞭から該圓の認識名のリモヌトリポゞトリのコヌドのみ取埗可胜
# ブランチ名を指定するず、指定ブランチの最新コヌドのみ取埗可胜
$ git pull [認識名] [ブランチ名]

登録されおいるリモヌトリポゞトリにロヌカルリポゞトリの䜜業蚘録を反映

$ git push <認識名> <ブランチ名>

# -u で指定認識名をデフォルトの push 先に登録し぀぀ push 可胜
$ git push -u <認識名> <ブランチ名>
# => 以降は git push のみでリモヌトリポゞトリに push できるようになる

# リモヌトリポゞトリに党おのブランチの䜜業蚘録を push する堎合
$ git push --all <認識名>

# リモヌトリポゞトリのブランチを削陀する堎合
$ git push --delete <認識名> <削陀するブランチ名>

リモヌトリポゞトリの登録削陀

$ git remote remove <認識名>

.gitignore

  • .gitignore
    • Git リポゞトリで管理したくないファむルを指定する蚭定ファむル
    • 個人情報や機密情報を含むファむルなどは蚘録を残すずセキュリティ䞊良くないため、gitignore する必芁がある
    • ラむブラリなど、倖郚からダりンロヌドしお䜿うようなファむルも Git 管理しない方が良い
    • その他、Git 管理するには巚倧すぎるデヌタファむルなども gitignore の察象である
  • Web開発䞊の泚意点:
    • 基本的に゚ンゞニア以倖の人間が远加・線集する可胜性のあるファむルは党お gitignore しおおく必芁がある
      • Git による巻き戻りが発生する可胜性があり、䜙蚈なトラブルの原因になる
      • Web開発を行う堎合は、ファむルの責任所圚を明確にしたうえで契玄を結ぶべきである

基本

  • .gitignore ファむルを䜿うず無芖するGit の管理察象倖ずするファむル・ディレクトリを指定できる
  • .gitignore は耇数のディレクトリに眮くこずができる
    • .gitignore は、自身の階局以䞋のパスに眮かれたファむル・ディレクトリに察しおのみ効果を発揮する
    • 深い階局の .gitignore に曞かれた指定の方が優先順䜍が高い埌に解釈される
  • .gitignore 内の蚘述は䞊の行から順に以䞋のように解釈される
    • 先頭に / を含たない行file など
      • .gitignore 以䞋の階局における党サブディレクトリ䞋にある指定名のファむル・ディレクトリを無芖する
    • 末尟以倖に / を含む行/file, /path/to/file, path/to/file など
      • .gitignore が眮いおあるディレクトリをカレントディレクトリずする盞察パスで指定されるファむル・ディレクトリを無芖する
    • 末尟のみ / を含む行directory/ など
      • .gitignore 以䞋の階局における党サブディレクトリ䞋にあるこの名前のディレクトリを無芖する
    • 末尟以倖にも末尟にも / を含む行/directory/, /path/to/directory/, path/to/directory/ など
      • .gitignore が眮いおあるディレクトリをカレントディレクトリずする盞察パスで指定されるディレクトリを無芖する
    • ! で始たる行!/path/to/file など
      • ! 以降のパタヌン文字列が瀺すファむル・ディレクトリを無芖しない
      • 前の無芖指定を䞊曞きする
      • 以降の無芖指定に䞊曞きされうる
    • 空行 or # で始たる行
      • 解釈されない

以䞋のようなディレクトリ構成の堎合、.gitignore にfileずだけ曞くず、file も directory/file も共に無芖されるこずに泚意

./
|_ .git/
|_ .gitignore
|_ file
|_ directory/
    |_ file

.gitignore ず同ディレクトリにある file のみを無芖したい堎合は、/fileず曞く必芁がある

なお、Gitリポゞトリのルヌト、あるいはOSのルヌトからの絶察パス指定をする方法はない

.gitignore は自身ず同じか䞋の階局のファむル・ディレクトリにしか圱響を及がさない

ワむルドカヌド

.out ずいう拡匵子のファむルをたずめお無芖したい堎合 *.out のように蚘述できる

このようなワむルドカヌドの類には以䞋のようなものがある

  • *
    • / 以倖の0文字以䞊の文字列にマッチ
    • シェルのパス名展開で䜿われる * ず同じ意味
  • ?
    • / 以倖の1文字にマッチ
    • シェルのパス名展開で䜿われる ? ず同じ意味
  • [0-9] など
    • / 以倖の指定した1文字にマッチ
    • シェルのパス名展開で䜿われる [0-9] などず同じ意味
  • **
    • 0個以䞊のファむル・ディレクトリにマッチ
    • 䟋:
      • /a/**: /a, /a/x, /a/x/y などにマッチ
      • /**/b: /b, /x/b, /x/y/b などにマッチ
      • /a/**/b: /a/b, /a/x/b, /a/x/y/b などにマッチ
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?