Git/GitHubまとめ

Git のサイトに詳しいマニュアルがある。また,Pro Git というオンライン本が公開されている。日本語版もある。2014年の本で,Git 2.8.0 というやや古いバージョンを使っている。

MacのコマンドラインツールにはGitが入っている:

% which git
/usr/bin/git
% git --version
git version 2.32.0 (Apple Git-132)

あるいはHomebrewで最新のものを入れる:

% brew install git
% hash -r
% git --version
git version 2.36.0

LinuxにはGitが入っているか簡単に入れられる。WindowsにはGit Bashなどのツールがある。

自分でGitサーバを立てる方法は gitサーバ構築 を参照。

そうでない場合は,まず GitHub にサインアップする(アカウントを作る)。

自分のPC(ここではMac)での設定:

git config --global user.name okumuralab # GitHub のユーザ名
git config --global user.email okumura@okumuralab.org # 同メアド
git config --global pull.rebase false
git config --global core.editor emacsclient # 自分の好きなエディタを指定
git config --global init.defaultBranch main # Git 2.28以降

これらの設定は ~/.gitconfig に入るだけなので,そちらを編集してもよい。

上の最後の設定について補足説明しておく。リポジトリはいくつかのブランチに区切ることができる。デフォルトのブランチ名は昔は master であったが,この名前は政治的に正しくないということで,Git 2.28 からデフォルトを設定できるようになった。今では main に設定するのが一般的である。

GitHub でも 2020-10-01 からデフォルトが変更されたRenaming the default branch from master も参照。

すでに GitHub で master という名前を使っていたら,Web 上で master という表示をクリックし,View all branches をクリックして,master の右側の🖋️をクリックし,main に変更できる。変更したら,ローカルのリポジトリで次のように再設定する必要がある:

git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a

GitHub Pages の場合,ブランチ名を変えると unpublish されるが,何かを commit すれば再構築される。

GitHub でリポジトリを作る(空でもいい)。それを適当なディレクトリにクローンする:

git clone https://github.com/username/repositoryname.git

これで repositoryname というディレクトリが作られ,リモートリポジトリの内容がコピーされるので,その中に入って作業する。このディレクトリの中には .git という隠しディレクトリがあるが,その中は(よくわかっていないうちは)直接編集しない。それ以外の場所(ワーキングツリー,ワーキングディレクトリ)で作業する。

ワーキングツリーに新規作成したファイルあるいは編集したファイルは,まず

git add ファイル名またはディレクトリ名

でステージングエリア(インデックス)に移す。変更がある程度まとまった時点で

git commit -m "ログメッセージ"

で(ローカル)リポジトリ(.git 以下)にコミットする。あるいは

git commit

とだけ打ち込めばテキストエディタが立ち上がってログメッセージが編集できる。メッセージは英語の場合 README.md: add repository description のように,小文字動詞現在形で始め,ピリオドは付けないのが一般的。1行メッセージの後に空行をはさんで詳しい説明を書いてもよい。書き方については Submitting Patches の [[describe-changes]] 以下が参考になる。間違えたら

git commit --amend

でやり直せる。

add して commit するのが面倒であれば,

git commit -am "message"

とすれば,追跡状態の(tracked な)ファイルで変更されたものを一括コミットできる。

git status

で状態が確認できる。追跡しない(untracked な)状態のままにして git status にも表示したくないなら,.gitignore というファイルの各行にファイル名を列挙しておけば,そのディレクトリ以下で同名のファイルは無視される。

不用意にファイルを変更してしまったら

git restore ファイル名

で取り消せる。

この段階ではまだリモートには送られていない。ローカルリポジトリをリモートの main ブランチに送るには,まず現在のブランチ名を把握する。

git branch           # ブランチ名を表示
git branch -m main   # 現在のブランチ名がmasterであればmainに変更
git push origin main # リモートのmainブランチに送る

あるいは

git push -u origin main # リモートのブランチをmainに設定(-u は --set-upstream の略)
git push                # 上で設定したリモートのブランチに送る

新しいブランチを作る:

git branch develop  # developというブランチを作る
git branch          # 確認
git switch develop  # ブランチ移動

ブランチ移動は,以前は git checkout を流用したが,Git 2.23 で git switch コマンドが新設された。