Gitの使い方メモ

2022-11-27git,github

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 -Agit add .git add -uでも良い。違いは次の通り。

  1. git add -Aは新規作成・更新・削除のあったリポジトリ内のすべてのファイルを追加する。
  2. git add .はカレントディレクトリ以下で新規作成・更新・削除のあったファイルを追加する。
  3. git add -uは更新・削除のあったリポジトリ内のすべてのファイルを追加する。新規作成されたファイルは対象外。

なお、.gitignoreに記載されたファイルはGitの管理対象から除外されるので、そのようなファイルがある場合は作成しておくこと。

また、空のディレクトリはGitの管理対象外。空のディレクトリを保持しておきたい場合は、.gitkeepといった中身が空のファイルや、次のような内容を記載した.gitignoreを置いておくと良い。

*
!.gitignore

.gitignore.gitkeepについては、このあたりが参考になる。

インデックスに登録したら、次のコマンドでコミットする。

git commit -m "commit message"

-mオプションは複数つけることも可能。この場合、個別の段落として扱われる。また、コミットメッセージをファイルに記録しておいて、-Fオプションでファイル名を指定することも可能。

git commit -F file

GitHubにリモートリポジトリを作成する

  1. GitHubにログインする。
  2. 右上の”+”をクリックし、"New repository"を選択する。
    github-1-1
  3. リポジトリ名を入力する。
  4. リポジトリを"Public"と"Private"のどちらにするか選択する。無料プランだと"Public"のみが指定できる。
  5. リポジトリをどのように初期化するか、必要とするものにチェックを入れる。ローカルリポジトリの内容をリモートリポジトリに反映させる場合は、いずれにもチェックを入れない。
  6. ”Create repository"を押してリポジトリを作成する。
    github-1-2

このように作成したリモートリポジトリをローカルリポジトリに登録するにはローカルで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ブランチの内容がリモートリポジトリoriginmasterブランチに反映される。

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

この場合、次のように対処する。

  1. Git Bashを立ち上げる。
    git-5
  2. /etc/gitconfigを開く
  3. sslCAInfo行のパスを正しいものに直す。
    git-6

リモートリポジトリの内容をローカルリポジトリへ取り込む

リモートリポジトリの内容をローカルリポジトリに取り込むためには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

git,github

Posted by izadori