Git のコマンドラインインターフェース#
Pro Git 日本語版: https://git-scm.com/book/ja/v2
基礎#
git help <command>: git コマンドのヘルプ情報を取得git init: 新しい git リポジトリを作成し、そのデータは.gitという名前のディレクトリに保存されるgit status: 現在のリポジトリの状態を表示git add <filename>: ファイルをステージングエリアに追加git commit: 新しいコミットを作成- どのように 良いコミットメッセージを書くか!
- なぜ 良いコミットメッセージを書く必要があるのか
git log: 履歴ログを表示git log --all --graph --decorate: 履歴を視覚化(有向非循環グラフ)git diff <filename>: ステージングエリアのファイルとの違いを表示git diff <revision> <filename>: 特定のファイルの 2 つのバージョン間の違いを表示git checkout <revision>: HEAD と現在のブランチを更新
ブランチとマージ#
git branch: ブランチを表示git branch <name>: ブランチを作成git checkout -b <name>: ブランチを作成し、そのブランチに切り替えgit branch <name>; git checkout <name>と同等
git merge <revision>: 現在のブランチにマージgit mergetool: ツールを使用してマージコンフリクトを処理git rebase: 一連のパッチを新しいベースにリベース
リモート操作#
git remote: リモートを一覧表示git remote add <name> <url>: リモートを追加git push <remote> <local branch>:<remote branch>: オブジェクトをリモートに送信し、リモートの参照を更新git branch --set-upstream-to=<remote>/<remote branch>: ローカルとリモートブランチの関連付けを作成git fetch: リモートからオブジェクト / インデックスを取得git pull:git fetch; git mergeと同等git clone: リモートからリポジトリをダウンロード
取り消し#
git commit --amend: コミットの内容または情報を編集git reset HEAD <file>: ステージングされたファイルを復元git checkout -- <file>: 変更を破棄git restore: git2.32 以降のバージョンで git reset の多くの取り消し操作を置き換える
Git 高度な操作#
git config: Git は 高度にカスタマイズ可能な ツールgit clone --depth=1: シャロークローン(shallow clone)、完全なバージョン履歴情報を含まないgit add -p: インタラクティブなステージングgit rebase -i: インタラクティブなリベースgit blame: 最後に特定の行を変更した人を確認git stash: 作業ディレクトリの変更内容を一時的に削除git bisect: 二分探索を使用して履歴を検索.gitignore: 追跡しないファイルを指定
雑多#
- グラフィカルユーザーインターフェース: Git の グラフィカルユーザーインターフェースクライアント は多数ありますが、私たちはこれらのグラフィカルユーザーインターフェースクライアントを使用せず、コマンドラインインターフェースを選択します
- シェル統合: Git ステータスをシェルに統合すると非常に便利です。(zsh, bash)。Oh My Zshのようなフレームワークには一般的にこの機能が統合されています
- エディタ統合: 上記と同様に、Git をエディタに統合することには多くの利点があります。fugitive.vim は Vim で Git を統合するための一般的なプラグインです
- ワークフロー: データモデルといくつかの基本コマンドについて説明しましたが、大規模プロジェクトを行う際のいくつかの慣習についてはまだ議論していません ( 多くの 異なる アプローチ)
- GitHub: Git は GitHub と同じではありません。 GitHub では、他のプロジェクトにコードを貢献するために プルリクエスト(pull request) と呼ばれる方法を使用する必要があります
- 他の Git プロバイダー: GitHub は唯一ではありません。 GitLab や BitBucket のようなプラットフォームもあります。
リソース#
- Pro Git 、強く推奨!最初の 5 章を学ぶことで、Git のデータモデルを理解しているため、ほとんどのテクニックをスムーズに使用できるようになります。後の章では多くの興味深い高度なテーマが提供されています。(Pro Git 日本語版);
- Oh Shit, Git!?! 、Git エラーからの回復方法を簡潔に紹介;
- Git for Computer Scientists 、Git のデータモデルを簡潔に紹介し、この記事と比較して少量の擬似コードと多くの美しい画像を含む;
- Git from the Bottom Up Git の実装の詳細を詳しく説明し、データモデルに限定されない。興味のある方はぜひご覧ください;
- How to explain git in simple words;
- Learn Git Branching ブラウザベースのゲームを通じて Git を学ぶ;
課題#
- もし以前に Git を使用したことがない場合は、 Pro Git の最初の数章を読むことをお勧めします。または、 Learn Git Branching のようなチュートリアルを完了してください。Git コマンドとデータモデルに関連する内容に重点を置いてください;
- このコースのウェブサイトのリポジトリをフォークする
- バージョン履歴を視覚化して探索する
Git log --all --graph --decorate - 誰が最後に
README.mdファイルを変更しましたか?(ヒント:git logコマンドを使用し、適切なパラメータを追加)git log -1 README.md- -x オプション:最新の x 回のコミットまたは特定のファイルのバージョン情報を表示
- 最後に
_config.ymlファイルのcollections:行を変更したときのコミットメッセージは何ですか?(ヒント:git blameとgit showを使用)git blame _config.yml | grep collections git show --pretty=format:"%s" a88b4eac | head -1 git log --pretty=format:"%s" a88b4eac -1
- バージョン履歴を視覚化して探索する
- Git を使用する際の一般的なエラーは、Git に管理されるべきではない大きなファイルをコミットすることや、機密情報を含むファイルを Git にコミットすることです。リポジトリにファイルを追加し、コミットメッセージを追加してから、履歴から削除してみてください ( この記事が役立つかもしれません);
- まず、いくつかの機密情報をコミットする
echo "password123">my_password git add . git commit -m "add password123 to file" git log HEAD git filter-branchを使用してコミット履歴を消去git filter-branch --force --index-filter\ 'git rm --cached --ignore-unmatch ./my_password' \ --prune-empty --tag-name-filter cat -- --all
- まず、いくつかの機密情報をコミットする
- GitHub からリポジトリをクローンし、いくつかのファイルを変更します。
git stashを使用すると何が起こりますか?git log --all --onelineを実行すると何が表示されますか?git stash popコマンドを使用してgit stash操作を元に戻すとき、このテクニックはいつ使用されますか? - 他のコマンドラインツールと同様に、Git も
~/.gitconfigという名前の設定ファイル(またはドットファイル)を提供します。~/.gitconfigにエイリアスを作成し、git graphを実行すると、git log --all --graph --decorate --onelineの出力結果が得られるようにしてください; git config --global core.excludesfile ~/.gitignore_globalを実行することで、~/.gitignore_globalにグローバル無視ルールを作成できます。システムやエディタの一時ファイル(例:.DS_Store)を自動的に無視するようにグローバル gitignore ファイルを設定してください;- このコースのウェブサイトのリポジトリをクローンし、スペルミスや改善点がないか探し、GitHub でプルリクエスト(Pull Request)を作成してください;