Gitの使い方メモ
Gitを使い始めてまだなれていないため、自分なりに調べた使い方のメモ。間違い・勘違いしているところも多々あるはず。
22.11.27 更新
環境
Windows 10
> git --version
git version 2.30.0.windows.1
Lubuntu Linux 20.04 LTS
$ git --version
git version 2.25.1
ローカルリポジトリの作成
/path/to/repository
以下にtest
というリポジトリを作成する場合
cd /path/to/repository
mkdir test
cd test
git init
このようにすることで/path/to/repository/test/
以下にローカルリポジトリが作成される。
ローカルリポジトリへのファイルの追加
test
ディレクトリ内に何かファイルを作成後、作成したファイルをインデックスに登録する。(例)README.md
echo "# test" > README.md
git add README.md
複数のファイルを登録する場合は、git add -A
やgit add .
やgit add -u
でも良い。違いは次の通り。
git add -A
は新規作成・更新・削除のあったリポジトリ内のすべてのファイルを追加する。git add .
はカレントディレクトリ以下で新規作成・更新・削除のあったファイルを追加する。git add -u
は更新・削除のあったリポジトリ内のすべてのファイルを追加する。新規作成されたファイルは対象外。
なお、.gitignore
に記載されたファイルはGitの管理対象から除外されるので、そのようなファイルがある場合は作成しておくこと。
また、空のディレクトリはGitの管理対象外。空のディレクトリを保持しておきたい場合は、.gitkeep
といった中身が空のファイルや、次のような内容を記載した.gitignore
を置いておくと良い。
*
!.gitignore
.gitignore
や.gitkeep
については、このあたりが参考になる。
インデックスに登録したら、次のコマンドでコミットする。
git commit -m "commit message"
-m
オプションは複数つけることも可能。この場合、個別の段落として扱われる。また、コミットメッセージをファイルに記録しておいて、-F
オプションでファイル名を指定することも可能。
git commit -F file
GitHubにリモートリポジトリを作成する
- GitHubにログインする。
- 右上の”+”をクリックし、"New repository"を選択する。
- リポジトリ名を入力する。
- リポジトリを"Public"と"Private"のどちらにするか選択する。無料プランだと"Public"のみが指定できる。
- リポジトリをどのように初期化するか、必要とするものにチェックを入れる。ローカルリポジトリの内容をリモートリポジトリに反映させる場合は、いずれにもチェックを入れない。
- ”Create repository"を押してリポジトリを作成する。
このように作成したリモートリポジトリをローカルリポジトリに登録するにはローカルでgit remote add
を使用する。
たとえばリポジトリtest
をユーザー名user
が作成した場合は次のようにする。
- https接続の場合
git remote add origin https://github.com/user/test.git
- SSH接続の場合
git remote add origin git@github.com:user/test.git
git remote -v
で現在登録されているリモートリポジトリが確認できる。
$ git remote -v
origin https://github.com/user/test.git (fetch)
origin https://github.com/user/test.git (push)
コミットしたローカルリポジトリの内容をリモートリポジトリへ反映させる
ローカルリポジトリの内容をリモートリポジトリに反映させるためにはgit push
を使用する。
git push origin master
これによりローカルリポジトリのmaster
ブランチの内容がリモートリポジトリorigin
のmaster
ブランチに反映される。
git push -u origin master
とした場合、origin
上のmaster
ブランチがローカルのmaster
ブランチの上流ブランチとして設定される。
「上流ブランチ」とは、あるローカルブランチが更新を追跡するリモートブランチのことらしいが、まだ良く理解できていない。
上流ブランチを設定すると引数なしのgit push
でリモートブランチを最新の情報に更新したり、git pull
で最新のリモートブランチの情報を取ってくることができる。
リモートリポジトリの内容を新たにローカルに複製する
ローカルにリポジトリを複製するには、git clone
を使用する。
GitHubを例に取り、GitHub上のユーザー名user
のリポジトリtest
をローカルに複製するには次のようにする。
- https接続の場合
git clone https://github.com/user/test.git
- SSH接続の場合
git clone git@github.com:user/test.git
Windowsでclone時に「証明書が見つからない」エラーが出る場合(21.02.16追加)
Windowsでgit clone
しようとしたときに証明書が見つからないと言われることがある。
> git clone https://github.com/user/test.git
Cloning into 'test'...
fatal: unable to access 'https://github.com/user/test.git/': error setting certificate verify locations: CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt CApath: none
この場合、次のように対処する。
- Git Bashを立ち上げる。
/etc/gitconfig
を開くsslCAInfo
行のパスを正しいものに直す。
リモートリポジトリの内容をローカルリポジトリへ取り込む
リモートリポジトリの内容をローカルリポジトリに取り込むためにはgit pull
を使用する。
git pull origin master
これによりリモートリポジトリのmaster
ブランチの内容がローカルリポジトリmaster
ブランチに取り込まれる。
ベアリポジトリの作成
ベアリポジトリとは、作業用のファイル持たず、管理用のファイルのみを持つリポジトリのこと。/path/to/repository
以下にベアリポジトリbare.git
を新規作成する場合は、次のようにする。
cd /path/to/repository
mkdir bare.git
cd bare.git
git init --bare
ベアリポジトリのディレクトリは、慣例としてこの例のように.git
で終わる名前にするようだ。
また、既存のリポジトリ/path/to/src
からカレントディレクトリにベアリポジトリbare.git
を作成する場合は、次のようにする。
git clone --bare /path/to/src bare.git
コミットした内容を取り消す
誤ってコミットしてしまったものを取り消す方法は2種類。
git reset
git revert
git reset
は前のコミットした状態まで戻すときに使う。このとき過去の履歴も消える。直前のコミットだけを取り消すときは、
git reset --soft HEAD^
インデックスに登録した内容まで取り消すときには、
git reset --hard HEAD^
とする(ファイルも変更内容が取り消される)。誤ってresetしてしまった場合は、HEAD^
の代わりにORIG_HEAD
を指定することで元に戻せる。
git reset
についてはこのあたりが参考になる。
一方、git revert
は、前のコミットを打ち消すときに使う。git reset
と違い、「コミットを打ち消した」ことをコミットするため、過去の履歴は残る。
直前のコミットを打ち消す場合は、次のようにする。
git revert HEAD
ブランチ(21.02.16追加)
ブランチの作成と切り替え
新たなブランチ(例:anotherbranch
)を作成する場合は、git branch
を使う。また、ブランチを切り替えるには、git checkout
を使う。
git branch anotherbranch
git checkout anotherbranch
次のようにすることで、ブランチの作成と切り替えを一度に行うことができる。
git checkout -b anotherbranch
なお、ブランチの切り替えを行う際にコミットされていない変更がある場合は、切り替えできないので、事前にコミットしておく。
コミットしたくない場合は、git stash
を使う。
ブランチのマージ
anotherbranch
ブランチで行った変更をmaster
ブランチにマージする場合は、いったんマージ先のmaster
にブランチを切り替えてからマージを実行する。
git checkout master
git merge master anotherbranch
ブランチの削除
不要になったブランチ(例:anotherbranch
)を削除する場合は、次のようにする。
git branch -d anotherbranch
(参考:Git公式ドキュメント)
タグ(21.09.06追加)
ローカルリポジトリのタグ付け
特定のコミットに名前(例:v1.0.0
)をつける場合は、次のようにする。
git tag "v1.0.0"
簡単なコメントを付ける場合は、タグ名の前に-a
オプションをつけ、さらに-m
オプションの後に、コメントを入力する。
git tag -a "v1.0.0" -m "first stable version"
リモートリポジトリへの反映
これだけでは、リモートリポジトリに反映されない。タグ名をリモートリポジトリに反映させる場合は、次のように最後にタグ名を付加する必要がある。
git push origin "v1.0.0"
複数のタグがローカルにある場合、それをまとめて反映させるには、-tags
を付加する。
git push origin -tags
特定のタグ名の内容をリモートリポジトリから持ってくる
リモートリポジトリにある特定のタグの内容を取ってくる場合は、次のようにする。
git pull origin "v1.0.0"
タグの一覧の確認
タグの一覧を確認する場合は、次のようにする。
git tag
タグの削除
ローカルリポジトリのタグを削除する場合は、次のようにする。
git tag -d "v1.0.0"
リモートリポジトリのタグを削除する場合は、次のようにする。
git push origin --delete "v1.0.0"
(参考)
stash(22.11.27追加)
現在作業している内容を一時中断して別の作業をする場合に、stashと呼ばれる領域に現在の作業内容を保存しておくことができる。
作業の退避
git stash push
git stash save
push
はなくても良い。コメントをつけたい場合は、次にようにする。
git stash push -m "comment"
git stash save "comment"
push
, save
では、追跡されていないファイルが退避されないので、これらも退避したい場合は、次のようにする。
git stash push -u
git stash save -u
退避した作業の確認
退避した作業の一覧を確認する場合は次のようにする。
git stash list
退避した作業の復帰
最新の作業を復帰する場合は次にようにする。
git stash pop
git stash apply
両者の違いは、前者が復帰とともに退避情報を削除するのに対し、後者は復帰のみで退避情報の削除を行わない。特定の作業から復帰する場合は(例:2番目の退避情報)、次のようにする。
git stash pop stash@{1}
git stash apply stash@{1}
また、単にpop
, apply
をしただけでは、ステージングされたファイルもステージングされていない状態に戻ってしまうため、ステージングを維持するためには--index
を付加する必要がある。
git stash pop --index
git stash apply --index
退避した作業の削除
特定の作業を削除するには(例:2番目の作業)、次のようにする。
git stash drop stash@{1}
すべて削除するには次のようにする。
git stash clear
ディスカッション
コメント一覧
まだ、コメントがありません