バージョン管理として(ようやく)Gitを使い始めたので、Git入門のために学んだ「Gitの基本ワークフロー」をシェアします。 gitの一連の流れを学びながら、基本的なgitコマンドを体験する形になっています。メモ書きの形なので、公式レファレンス等の補完としてご活用ください。
目次:
- Gitは公式レファレンスが充実。書籍”Pro Git”も無料でDL可能
- Gitの基本構文
- Git設定ファイル
- Git設定ファイルの場所と設定方法
- ユーザーごとのGit設定ファイルの更新: git config —global
- Git設定ファイルのパスと設定内容を表示
- git status, git diffなどでターミナル上の色分け・色付けをする
- リモートリポからクローンしてローカルリポを作成する: git clone
- 接続されているGitリモートリポジトリの情報を確認: git remote -v
- ブランチ操作
- ブランチ一覧を表示。現在の作業ブランチを確認: git branch
- 新しいブランチを切る(新しいブランチを作成): git branch <branch-name>
- 作業するブランチを切り替える: git checkout <branch-name>
- 新しいブランチを切って、さらに切り替える: git checkout -b <branch-name>
- コミット履歴からcheckout。ファイルを最後にコミットしたバージョンに戻す: git checkout — <filename>
- 作業内容をStaging Areaに上げる
- Git作業状態を確認する: git status
- Stating Areaに上げる: git add <filename>
- カレントディレクトリ配下のすべてのファイル・フォルダを再帰的に一括でStaging Areaに追加する: git add .
- dry run(予行演習)
- 本当は追加したくない変更をgit addしてしまった場合に元に戻す
- Staging Areaの内容をリポジトリにコミットする
- コミット時には必ずコミットメッセージをつける: git commit -m “<commit message>”
- コミット履歴の一覧を表示する: git log
- ローカルリポの内容をリモートリポに反映(push)させる
- 他の人がリモートリポに変更を加えている可能性があるため、push前にリモートリポから一旦pullする
- pushしたブランチをmainにマージしてもらうよう依頼: pull request (GitHub上)
- ローカルリポのmainブランチをリモートリポからpullして更新
- 不要になったブランチを削除する
- 特定のブランチを削除: git branch -d <branch-name>
- リモートリポジトリはGitHub上から削除
- GitHubをコマンドラインから操作するGitHub CLI
Gitは公式レファレンスが充実。書籍”Pro Git”も無料でDL可能
Gitは公式レファレンスが充実しており、ドキュメントはもちろん、僅かながらチュートリアル動画も用意されています。
ドキュメントからはやりたいことの分類・各gitコマンドから参照することが可能。
Git
Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.
git-scm.com
Amazonで販売されている書籍”Pro Git”(紙の物理本は有料・kindle版は無料)は、公式サイトから無料で閲覧、pdf, epub, mobi形式でダウンロード可能です。
Pro Gitは、公式サイトからだと日本語版も閲覧、無料ダウンロード(pdf, epub形式)することができます。
Gitの基本構文
Gitのコマンドは基本的に全て下記コマンドの形をとります。必ず、頭にgitをつける形。
$ git <command>gitコマンドは引数をもち、オプションを設定することが可能です。
$ git <options> <command> <arguments>Git - git Documentation
Git設定ファイル
Git では、いくつかの設定ファイルを使ってデフォルト以外の挙動を定義します。 最初に Git が見るのは /etc/gitconfig で、ここにはシステム上の全ユーザーの全リポジトリ向けの設定値を記述します。 git config にオプション --system を指定すると、このファイルの読み書きを行います。次に Git が見るのは ~/.gitconfig (または ~/.config/git/config )で、これは各ユーザー専用のファイルです。 Git でこのファイルの読み書きをするには、--global オプションを指定します。
最後に Git が設定値を探すのは、現在使用中のリポジトリの設定ファイル (.git/config) です。 この値は、そのリポジトリだけで有効なものです。
これらの “レベル” (システム、グローバル、ローカル)の間では、いずれも後から読んだ値がその前の値を上書きします。したがって、たとえば .git/config に書いた値は /etc/gitconfig での設定よりも優先されます。
Git - Git の設定
git config --global user.name "John Doe" $ git config --global user.email [email protected] Git の設定オプションは、おおきく二種類に分類できます。クライアント側のオプションとサーバー側のオプションです。 大半のオプションは、クライアント側のもの、つまり個人的な作業環境を設定するためのものとなります。 大量の、 本当に大量の オプションが使用できますが、ここでは、もっとも一般的で、もっともよく使われているものだけを取り上げます。 その他のオプションの多くは特定の場合にのみ有用なものなので、ここでは扱いません。 Git で使えるすべてのオプションを知りたい場合は、次のコマンドを実行しましょう。 core.editor デフォルトでは、コミットやタグのメッセージを編集するときには、ユーザーがデフォルトエディタとして設定したエディタ( $VISUAL または $EDITOR)が使われます。デフォルトエディタが設定されていない場合は vi エディタが使われます。 このデフォルト設定を別のものに変更するには core.editor を設定します。 これで、シェルのデフォルトエディタに関係なく、Git でメッセージを編集する際には Emacs が起動されるようになりました。 commit.template システム上のファイルへのパスをここに設定すると、Git はそのファイルをコミット時のデフォルトメッセージとして使います。 たとえば、次のようなテンプレートファイルを作って ~/.gitmessage.txt においたとしましょう。 すると、コミットメッセージの雛形としてこのような内容がエディタに表示されます。 コミットメッセージについてチーム内に所定の決まりがあるのなら、その決まりに従ったテンプレートをシステム上に作って Git にそれを使わせるようにするとよいでしょう。そうすれば、その決まりに従ってもらいやすくなります。 core.pager は、Git が log や
git-scm.com
Git設定ファイルの場所と設定方法
■ システム上の全ユーザー
/etc/gitconfig
$ git config --system <attribute> <value>※ 自分の場合はGitシステム全体設定ファイルは /usr/local/etc/gitconfig にありました。
// # 設定ファイルのパスと設定内容を表示
$ git config --list --show-origin --show-scopegit - Cannot find gitconfig file - Stack Overflow
■ ユーザーごと(グローバル)
~/.git/config
$ git config --global <attribute> <value>基本的にはこのグローバルGit設定ファイルでユーザーごとに設定を管理する。
■ リポジトリ内(ローカル)
<Git Project Folder>/.git/config
(~/.gitconfig)?
$ git config --local <attribute> <value>ユーザーごとのGit設定ファイルの更新: git config —global
git config --global <attribute> <value>—globalをつけることで当該ユーザのシステム全体の設定となる。
~/.gitconfig
—global をつけないと、実行したリポジトリ独自の設定となる。
~/.git/config
Git設定ファイルのパスと設定内容を表示
/ # 設定ファイルのパスと設定内容を表示
$ git config --list --show-origin --show-scopegit status, git diffなどでターミナル上の色分け・色付けをする
下記コマンドでグローバル設定(ユーザーごとの設定)にターミナルUIの色付け機能をONにできます。
デフォルトではautoで既にONになっているはずですが、ならない場合は下記。
$ git config --global color.ui autoターミナルでパイプを通して出力した場合などにも、強制的にGit UIによる色付けした形で出力させたい場合はalwaysを指定。
$ git config --global color.ui always■ 参考:
Git - Git の設定
コマンドラインでのgitの色設定 - Qiita
git diff に色を付けて見やすくする設定のやり方。 | WWWクリエイターズ
Git UIではないけれど、ターミナル上で今いるブランチ名を出力させたい場合には下記を参照。
gitのブランチ名をターミナルで表示できるようにする - Qiita
リモートリポからクローンしてローカルリポを作成する: git clone
Git - git-clone Documentation
Git - git-clone Documentation
l --local When the repository to clone from is on a local machine, this flag bypasses the normal "Git aware" transport mechanism and clones the repository by making a copy of HEAD and everything under objects and refs directories. The files under .git/objects/ directory are hardlinked to save space when possible.
git-scm.com
GitHub > 取得したいリモートリポ > Code > SSH > URLをcopy
ローカルリポを作成したい場所に移動して、git clone
$ cd ~/Desktop
$ git clone [email protected]:atsuyamaru/sample-repo.gitローカルにクローンしたリポジトリの中身を確認
$ ls -a ~/Desktop/sample-repo
./ ../ .git/ README.md.git/ はGitの設定ファイルフォルダ。このフォルダがあるためgitコマンドが有効になる。
接続されているGitリモートリポジトリの情報を確認: git remote -v
$ cd ~/Desktop/sample-repo
$ git remote -v
// or
$ git remote --verbose
origin [email protected]:atsuyamaru/sample-repo.git (fetch) # 取得先
origin [email protected]:atsuyamaru/sample-repo.git (push) # 送付先-v, —verbose: Be a little more verbose and show remote url after name.
Git - git-remote Documentation
ブランチ操作
Git - git-checkout Documentation
Git - git-checkout Documentation
q --quiet Quiet, suppress feedback messages. --progress --no-progress Progress status is reported on the standard error stream by default when it is attached to a terminal, unless --quiet is specified. This flag enables progress reporting even if not attached to a terminal, regardless of--quiet.
git-scm.com
ブランチ一覧を表示。現在の作業ブランチを確認: git branch
$ cd ~/Desktop/sample-repo
$ git branch
main
* update-readme # * 作業中のブランチ(Wordking Directory / Working Tree)新しいブランチを切る(新しいブランチを作成): git branch <branch-name>
$ git branch <branch-name>作業するブランチを切り替える: git checkout <branch-name>
$ git checkout <branch-name>checkout: 図書館の貸し出しカウンターのイメージ。
Gitシステムという図書館から、ブランチを貸し出し依頼する。貸し出し中のブランチは他の人は触ることはできない。
なお、git switchコマンドでも同様にブランチを切り替えることが可能です。
$ git switch <branch-name>Git - git-switch Documentation
参考: git branchとgit switchの違いについて: What's the difference between git switch and git checkout <branch> - Stack Overflow
新しいブランチを切って、さらに切り替える: git checkout -b <branch-name>
$ git checkout -b <branch-name>下記git switch -cコマンドでも同様に新しいブランチを作成可能です。
$ git switch -c <branch-name>
Git - git-switch Documentation
コミット履歴からcheckout。ファイルを最後にコミットしたバージョンに戻す: git checkout — <filename>
checkoutはブランチ切り替え以外にも、コミット履歴から直接、ワーキングエリアのファイルをコミット履歴の最新バージョンに戻す役割もある。
$ git checkout -- <file-name>作業内容をStaging Areaに上げる
Git作業状態を確認する: git status
$ git status
# WorkingDirectory: nothing is changed. Staging Area: notihng to commit
On branch update-readme
nothing to commit, working tree cleanリモートリポジトリと紐付いている場合、リモートリポジトリとの時間的な差分(ahead, behind, up to date)が表示されます。
表示されない、という場合は下記の記事をご覧ください。
git statusでリモートリポジトリとのbehind/ahead/up to dateが表示されない
Stating Areaに上げる: git add <filename>
$ git add README.mdカレントディレクトリ配下のすべてのファイル・フォルダを再帰的に一括でStaging Areaに追加する: git add .
git add に続く引数にはディレクトリを渡すこともできるため。
. はカレントディレクトリを指している。
$ git add .dry run(予行演習)
カレントディレクトリ配下のすべてのファイルを一括でStaging Areaに追加する、という予行演習。
$ git add --dry-run .または -nショートオプションでも可能。
$ git add -n .本当は追加したくない変更をgit addしてしまった場合に元に戻す
ステージングエリア上にある変更を作業ディレクトリへ戻す、取り消す。
$ git restore --staged <file>Staging Areaの内容をリポジトリにコミットする
コミット時には必ずコミットメッセージをつける: git commit -m “<commit message>”
$ git commit -m "update README.md"今いるブランチにコミットポイントが作成される。
コミット履歴の一覧を表示する: git log
Git - git-log Documentation
Git - git-log Documentation
If : is given in place of and , it is a regular expression that denotes the range from the first funcname line that matches , up to the next funcname line. : searches from the end of the previous-L range, if any, otherwise from the start of file.^: searches from the start of file.
git-scm.com
$ git log
commit 67866ecae2c840afa9fb18b37e558a36291381d8 (HEAD -> update-readme, origin/update-readme)
Author: atsuyamaru <[email protected]> # HEAD = your current branch
Date: Thu Feb 10 13:15:52 2022 +0900
update readme # commit message
commit 44489ce4aef713d179011d38d9562b015f9ef4b5 (origin/main, origin/HEAD, main)
Author: atsuyamaru <[email protected]> # origon = remote repo
Date: Tue Feb 8 03:11:24 2022 +0900
Initial commit # first commitment by defaultワンライナー表示
$ git log --onelineワンライナーかつ、変更内容を短く参照する
$ git log --shortstat --oneline
\\
0e58a54 (HEAD -> main) First commit
8497 files changed, 1288798 insertions(+)コミットを構成しているファイルを表示させる
$ git log --statローカルリポの内容をリモートリポに反映(push)させる
他の人がリモートリポに変更を加えている可能性があるため、push前にリモートリポから一旦pullする
pull:
$ git pull <remote_ref> <branchname>push:
$ git push <remote_ref> <branchname># pullを反映させるブランチ(ローカル)に現在いることを確認
$ git branch
main
* update-readme
# pullしてくるリモートリポジトリを指定する
# 指定のため、紐付いているリモートリポジトリを確認
$ git remote -v
origin [email protected]:atsuyamaru/sample-repo.git (fetch) # pull先
origin [email protected]:atsuyamaru/sample-repo.git (push) # push先
# git pull <remote_ref> <branchname> (メインブランチを指定)
$ git pull origin main
From github.com:atsuyamaru/sample-repo
* branch main -> FETCH_HEAD
# FETch_HEADのmainブランチからbranch(Wordking Directory)にpull
Already up to date.
# git push
$ git push origin update-readme # update-readmeブランチを指定。 ※mainではない
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 263 bytes | 263.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'update-readme' on GitHub by visiting:
remote: https://github.com/atsuyamaru/sample-repo/pull/new/update-readme
remote:
To github.com:atsuyamaru/sample-repo.git
* [new branch] update-readme -> update-readmepushするときは、mainを指定するのではなく、リモートリポジトリのupdate-readmeブランチにpushする。
update-readmeブランチにpushした後、mainにプルリクエストを依頼する。
pushしたブランチをmainにマージしてもらうよう依頼: pull request (GitHub上)
GitHub > sample-repo > update-readmeブランチに移動して、pushされているファイルを確認
mainブランチに戻る > Pull requests > New pull request
base: main ← compare: update-readme
pullリクエストのタイトル、コメントを作成してCreate Pull request
その後、main管理者がプルリクを承認してmainとマージさせる。
ローカルリポのmainブランチをリモートリポからpullして更新
pullコマンド: アクティブブランチにマージするコマンド
ローカルのmainブランチに移動してから、リモートリポジトリのmainブランチをpullする
※ ローカルでupdate-readmeをマージするのではなく、リモートリポジトリからpullすることでmainブランチを最新にする
# ローカル: どこのブランチにいるか確認
$ git branch
main
* update-readme
# mainブランチに移動: checkout
$ git checkout main
# リモートリポジトリからpull
$ git pull origin main不要になったブランチを削除する
特定のブランチを削除: git branch -d <branch-name>
※ mainにマージしていないブランチは削除できない
強制的に削除する場合は -D (大文字)オプションで削除できる
$ git branch -d update-readme
Deleted branch update-readme (was 67866ec).リモートリポジトリはGitHub上から削除
repo > branches
branch一覧画面に移動するので、該当のマージ済ブランチをゴミ箱マークから削除。
リモートリポジトリのブランチは削除を忘れやすいので、定期的に削除を実行する。
削除を忘れると、ブランチの数が増えすぎて視認性が悪くなる。
メインブランチにおいてマージする際に、自動的に「ブランチを削除しますか?」との確認ダイアログが表示されるようになった。
GitHubをコマンドラインから操作するGitHub CLI
GitHubをコマンドライン上から操作できるGitHub CLIについて、 GitHub CLIでローカルからリモートリポジトリを作成 の記事で解説しています。コマンドライン上からリモートリポジトリを作成できたり、ローカルリポジトリと紐づいているGitHubのページをコマンドラインの指示で開くことが可能です。 ぜひチェックしてみてください。
この記事の気になった箇所を読み返す:
- Gitは公式レファレンスが充実。書籍”Pro Git”も無料でDL可能
- Gitの基本構文
- Git設定ファイル
- Git設定ファイルの場所と設定方法
- ユーザーごとのGit設定ファイルの更新: git config —global
- Git設定ファイルのパスと設定内容を表示
- git status, git diffなどでターミナル上の色分け・色付けをする
- リモートリポからクローンしてローカルリポを作成する: git clone
- 接続されているGitリモートリポジトリの情報を確認: git remote -v
- ブランチ操作
- ブランチ一覧を表示。現在の作業ブランチを確認: git branch
- 新しいブランチを切る(新しいブランチを作成): git branch <branch-name>
- 作業するブランチを切り替える: git checkout <branch-name>
- 新しいブランチを切って、さらに切り替える: git checkout -b <branch-name>
- コミット履歴からcheckout。ファイルを最後にコミットしたバージョンに戻す: git checkout — <filename>
- 作業内容をStaging Areaに上げる
- Git作業状態を確認する: git status
- Stating Areaに上げる: git add <filename>
- カレントディレクトリ配下のすべてのファイル・フォルダを再帰的に一括でStaging Areaに追加する: git add .
- dry run(予行演習)
- 本当は追加したくない変更をgit addしてしまった場合に元に戻す
- Staging Areaの内容をリポジトリにコミットする
- コミット時には必ずコミットメッセージをつける: git commit -m “<commit message>”
- コミット履歴の一覧を表示する: git log
- ローカルリポの内容をリモートリポに反映(push)させる
- 他の人がリモートリポに変更を加えている可能性があるため、push前にリモートリポから一旦pullする
- pushしたブランチをmainにマージしてもらうよう依頼: pull request (GitHub上)
- ローカルリポのmainブランチをリモートリポからpullして更新
- 不要になったブランチを削除する
- 特定のブランチを削除: git branch -d <branch-name>
- リモートリポジトリはGitHub上から削除
- GitHubをコマンドラインから操作するGitHub CLI
Category: 開発・プログラミング | エンジニアリング
Tags: 勉強・学習 | Git