DUICUO

Gitを効率的に使う方法

[[385887]]

Gitは無料のオープンソースバージョン管理システムであり、現在最も人気のあるソースコード管理ツールです。この記事では、基本的なGitコマンドから高度な操作まで、Gitの使用中に発生する大小さまざまな問題のほとんどを網羅しています。

基本操作

初期化設定

ユーザー名とメールアドレスを設定する

  1. `$ git config --global user.name "ユーザー名"`  
  2. `$ git config --global user.email "メールアドレス"`  
  3.  
  4. - ここで、 --global はグローバル設定です。特定のプロジェクトごとに異なる設定を使用する場合は、このパラメータを削除できます。  
  5. - `git config` では他のオプションも設定できますが、あまり使用しないので、詳細については `git config --help`を参照してください。  

構成を表示

  1. $ git config --list  
  2.  
  3. # 特定の Git 設定項目を表示する
  4. `git configユーザー`  

SSHキーを作成する

  1. $ ssh-keygen -t rsa -C "メールアドレス"  
  2.  
  3. # 次に、ユーザーのホーム ディレクトリに .ssh ディレクトリが作成されます。このディレクトリには、id_rsa と id_rsa.pub の 2 つのファイルが含まれています。
  4. `id_rsa.pub` は SSH 公開です。これを GitHub SSH キーに追加すると、ローカルリポジトリをリモートリポジトリにプッシュできるようになります。

基本的なソースコード管理用のローカル リポジトリを作成します。

  1. # リポジトリを初期化する
  2. $ git 初期化
  3.  
  4. # ソースコードをステージングエリアに送信する
  5. `$ git add .`
  6.  
  7. # ステージングエリアからソースコードを送信する
  8. `git commit -m "このコミットのコメント"`  
  9.  
  10. # 現在のステータスを表示
  11. $ git ステータス
  12. `$ git status -sb` // ブランチと短いステータスを表示
  13.  
  14. # 提出履歴を表示
  15. $ git ログ

ローカルコードをリモートリポジトリに同期する

  1. # クローン
  2. `git clone リポジトリアドレス`
  3.   
  4. # リモートリポジトリ
  5. $ git リモート
  6.   
  7. # 支店
  8. `$ git branch branch_name` // 作成
  9. `$ git checkout branch_name` // スイッチ
  10.   
  11. # マージ
  12. `$ git merge ブランチ名`
  13.   
  14. # プルアップデート
  15. `$ git fetch hostname branch_name` // マージしない
  16. `$ git pull hostname branch_name` // マージ
  17.   
  18. # 押す
  19. `git push ホスト名 ブランチ名`
  20.   
  21. # タグ
  22. `git tag -a version_number -m "バージョンの説明"`  

高度な操作

SSL証明書エラーを無視する

HTTPS 経由で Git リモート リポジトリにアクセスする場合、サーバーの SSL 証明書がサードパーティの認証局によって署名されていない場合、Git は操作をブロックします。

  1. `$ env GIT_SSL_NO_VERIFY= true` `git clone リポジトリアドレス`
  2. $ cd 倉庫名
  3. $ git config http.sslVerify "false"  
  4.  
  5. - `env` コマンドを使用すると、証明書エラーの無視がこのクローンに対してのみ適用されるようになります。

ストレージ

コミットされていない変更がある場合、またはブランチの切り替えや更新のプルなど、リポジトリの状態をクリーンなままにしておく必要のある操作を実行する場合は、`git stash` を使用して現在の変更を一時的に保存できます。

  1. # ストレージ
  2. $ git スタッシュ
  3.   
  4. # ストレージを表示
  5. $ git スタッシュリスト
  6.   
  7. # 最近保存され削除されたアプリ
  8. $ git スタッシュポップ
  9.   
  10. # アプリケーション内の指定されたストレージを削除しない
  11. `$ git stash apply [stash_name]`
  12.   
  13. # ストレージを削除
  14. `git stash drop stash_name`

操作をキャンセル

作業ディレクトリとステージングエリアでの過去の操作が完璧だったとは保証できません。Gitは多くの元に戻すオプションを備えており、その点で非常に強力です。

  1. # ステージング領域内のファイルを破棄し、作業領域に戻します。
  2. `git で HEAD ファイルをリセット`
  3.   
  4. # ワークスペースの変更を破棄
  5. `git checkout --file`  
  6.   
  7. - ステージング領域に変更が追加されない場合は、git コミット時の状態に戻します
  8. - ステージングエリアに変更を加えた場合は、`git add`実行時の状態に戻すことができます
  9.   
  10. # 前のコミットを上書きする
  11. $ gitコミット  --amend [-m "コメントセクション"]  

バージョンのロールバック

  1. # 以前のコミットに戻す
  2. git リセット--hard コミットID  
  3.   
  4. - HEADは現在のバージョンを指します
  5. - `git log` を使用すると、コミット履歴を表示して、どのバージョンに戻すかを決定できます。
  6. `git reflog` コマンドを使用すると、コマンド履歴を表示し、どの将来のバージョンに戻すかを決定できます。
  7.   
  8. # 送信した投稿をキャンセル
  9. $ git コミットIDを元に戻す
  10.   
  11. - このコミットをプロジェクト履歴から削除する代わりに、新しいコミットが生成されます。  

支店

Gitには多くの利点がありますが、最も重要な点の一つはブランチの使いやすさです。リポジトリを作成する際、デフォルトのブランチはmasterです。一般的には、開発用のブランチを作成し、それらをメインブランチにマージします。

  1. # 開発ブランチを作成する
  2. git ブランチ dev
  3.   
  4. # 開発ブランチを作成して切り替える
  5. $ git チェックアウト -b dev
  6.   
  7. # メインブランチに戻る
  8. git チェックアウト マスター
  9.   
  10. # 前のブランチを素早く検出
  11. $ git チェックアウト -
  12.   
  13. # すべてのブランチを表示
  14. $ git ブランチ -a
  15.   
  16. # 現在のブランチにマージされたブランチのリストを表示する
  17. git ブランチ--merged  
  18.   
  19. # 現在のブランチにまだマージされていないブランチのリストを表示します
  20. git ブランチ--no-merged  
  21.   
  22. # 一時ブランチを削除
  23. git ブランチ -d 修正
  24.   
  25. # 開発ブランチをリモートリポジトリにプッシュする
  26. $ git プッシュ origin dev
  27.   
  28. # ブランチ名を変更する
  29. git ブランチ -m dev 開発
  30.   
  31. # リモートブランチを削除する
  32. - `$ git push origin --delete branch_name`  
  33. - $ git プッシュ origin :branch_name

ラベル

ソフトウェアの新しいバージョンがリリースされると、通常はタグ付けされます。

  1. # タグ
  2. `$ git tag [-a] tag_name [-m コミットのコメントID]`
  3.   
  4. # タグをリモートリポジトリにプッシュする
  5. `$ git push origin タグ名`
  6. `$ git push origin --tags` // すべてのタグをプッシュ 
  7.   
  8. # ローカルタグを削除する
  9. `git tag -d タグ名`
  10.   
  11. # リモートタグを削除する
  12. `git push origin --delete tag_name`  
  13. `git push origin :refs/tags/tags`

提出する

  1. # 提出物を閲覧する素敵な方法
  2. `$ git log --pretty=oneline` // 1行だけ表示します 
  3. `git log --abbrev-commit` // SHA-1 ハッシュの最初の数文字のみを表示します。  
  4. `$ git log --graph` // ブランチのマージ履歴を ASCII グラフィック表現で表示します。  
  5. `$ git log --relative-date` // より短い相対時間を表示します。  
  6. `git log --name-only` // コミットメッセージの後にのみ変更されたファイルのリストを表示します。  
  7. `git log -n` // 最新の n 個のコミットを表示します。
  8. `git log --author=fengshangwuqi` // 指定された著者に関連するコミットのみを表示します。  
  9. `git log --grep` // 指定されたキーワードを含むコミットのみを表示します。  
  10.   
  11. # 変更せずにコミット
  12. git commit -m "変更なしコミット"   --allow-empty  
  13.   
  14. 主に以下の状況で使用されます。
  15. - 新しいタスクまたは新しい機能の開始をマークします。
  16. - プロジェクトに対するコードに関連しない変更を文書化します。
  17. - リポジトリを使用して他の人とコミュニケーションをとる
  18. - リポジトリの最初のコミットとして。最初のコミット後にはリベースできないためです。

`git pull` と `git pull --rebase` の違い

  1. $ git pull = git fetch + git merge
  2. $ git pull --rebase = git fetch + git rebase  

git mergeとgit rebaseの違い

  1. # 類似点
  2. 統合の最終結果は同じスナップショットを指します。
  3.   
  4. # 違い
  5. ## 異なる提出履歴
  6. - マージにより新しいコミットノードが生成され、コミット履歴に実際に何が起こったかが忠実に記録されます。
  7. - リベースでは追加のコミットノードは生成されません。コミット履歴には、プロジェクトの開発中に発生した内容が反映されます。
  8. ## さまざまな紛争解決戦略
  9. - 競合が発生した場合、マージは直ちに停止します。再度マージを行うには、手動で競合を解決し、再コミットする必要があります。
  10. - リベースは競合が発生すると、現在の操作を一時停止します。開発者は手動で競合を解決し、`git rebase --continue` で続行するか、`--skip` でスキップするか、`--abort` で停止するかを選択できます。  
  11.   
  12. # 予防
  13. ## `git merge` は `--no-ff` と組み合わせて使用​​することをお勧めします。  
  14. - `git merge` はデフォルトで fast forwardに設定されており、これはブランチ B がブランチ A からチェックアウトされ、ブランチ A がまだコミットしていない場合に適しています。  
  15. ブランチBがチェックアウトされており、ブランチAも変更されている場合、Fast Forwardマージは実行できません。代わりに、ブランチAとBをマージするための追加のマージコミットが作成されます(つまり、 `--no-ff`)。この方法の利点は、ブランチ構造が保持されることです。  

他の

特殊ファイルを無視する

オペレーティングシステムによって自動生成されるファイル、コンパイル中に生成される中間ファイル、機密情報を含む設定ファイルは、追跡したりリモートリポジトリに保存したりしたくないものです。この場合、これらのファイルを無視するための `.gitignore` ファイルを作成します。以下は、フロントエンドプロジェクトで無視するファイルのリファレンスです。

  1. # ログ
  2. ログ
  3. *。ログ
  4.   
  5. # ランタイムデータ
  6. pids
  7. *.pid
  8. *。シード
  9. *.DS_ストア
  10.   
  11. # テスト
  12. カバレッジ
  13.   
  14. # 依存関係ディレクトリ
  15. ノードモジュール
  16.   
  17. # バウアー
  18. bower_components/
  19. 地区
  20.   
  21. # WebStorm ファイル
  22. *。アイデア/
  23.   
  24. # vscode ファイル
  25. .vscode/
  26.   
  27. # エマックス
  28. .tern-port
  29. .#*
  30. *#
  31. *~
  32.   
  33. # ヴィム
  34. .agignore
  35.   
  36. # 機密情報
  37. デフォルトの.yml

コミットメッセージのガイドライン

適切なコミットメッセージは、より多くの履歴情報を提供するため、閲覧や検索が容易になります。また、変更ログを直接生成することもできます。一般的に、コミットメッセージには少なくともタイプと件名を含める必要があります。タイプはコミットのカテゴリであり、件名はコミットの簡単な説明です。

  1. ## タイプ
  2.   
  3. - 機能: 新機能を追加
  4. - 修正: 欠陥を修復する
  5. - docs: ドキュメントの編集
  6. - スタイル: フォーマットを変更する
  7. - リファクタリング: リファクタリング
  8. - パフォーマンス: 最適化
  9. - テスト: テストを追加
  10. - 雑用: ビルドプロセスまたは補助ツールの変更
  11. - 元に戻す: 以前のバージョンにロールバックします

さらに、興味のある学生は、gitmoji や validate-commit-msg などのコンテンツを追加することもできます。

コミット メッセージを使用して問題をクローズします。

コミットで問題が修正された場合、ブランチにコミットする際のコミットメッセージには、「fix/fixes/fixed」、「close/closes/closed」、「resolve/resolves/resolved」などのキーワードに問題番号を続けて使用できます。これにより、問題がクローズされます。

  1. $ git commit -m "修正: ...、修正 #1、#2"  

これにより、問題 #1 と #2 が解決され、このコミットが問題のディスカッション リストにリンクされます。

他のリポジトリの問題にリンクしたい場合は、{user}/{repo}#ISSUE_NUMBER を使用してください。

ライセンスファイルを素早く追加

リポジトリを作成すると、GitHub によって事前にインストールされたソフトウェア ライセンスのリストが提供されます。


この時点で選択が行われていない場合は、Web インターフェイスから新しいファイルを作成し、LICENSE を入力して、右側の「ライセンス テンプレートを選択」をクリックすることで、後でライセンスを追加できます。


優れたGitHubプラグイン

  • Octotree: プロジェクトディレクトリを提供する
  • GitHub Plus: 各ファイルのサイズとダウンロード リンクを提供します。
  • GitHub ホバーカード: ユーザーのアバターまたはリポジトリ アドレスにマウスを移動すると、ホバーボードで詳細情報が表示されます。
  • GitHub 用 Sourcegraph: IDE でよく使用される機能と操作を提供します。
  • GitHubの素晴らしいオートコンプリート:より強力なインテリジェント検索を提供
  • Isometric Contributions: コミット履歴をよりユーザーフレンドリーに表示する方法

Git.io

Git.io は GitHub の URL 短縮サービスです。


通常の HTTP プロトコルの Curl コマンドで使用できます。

  1. $ curl -i https://git.io -F "url=https://github.com/..."  
  2. HTTP/1.1 201 作成
  3. 場所: https://git.io/abc123
  4.   
  5. $ curl -i https://git.io/abc123
  6. HTTP/1.1 302 見つかりました
  7. 場所: https://github.com/…

要点

Gists を使用すると、フル機能のリポジトリを使用しなくてもコード スニペットを簡単に管理できます。


Gist を使用すると、他の Web サイトに簡単に埋め込むことができる HTML コードを簡単に取得できます。

さらに、Gists は他の標準的なリポジトリと同様にクローン化でき、GitHub リポジトリと同様に変更や更新が可能です。ただし、Gists はディレクトリをサポートしておらず、すべてのファイルはリポジトリのルートディレクトリに追加されます。

キーボードショートカットを使用する

GitHubリポジトリページでは、素早く移動するためのキーボードショートカットがいくつか提供されています。「?」を押すと、現在のページでサポートされているキーボードショートカットの一覧が表示されます。


絵文字を使う

プルリクエスト、Issue、コミット、Markdownファイルにお気に入りの絵文字を追加できます。手順は以下のとおりです。

  1. :絵文字の名前:

たとえば、`joy:` は... を返します。

その他の絵文字については、絵文字チートシートを参照してください。

その中でも、最もよく使われる絵文字は次のとおりです。

  • :タダ:
  • :輝き:
  • :バグ::
  • :白いチェックマーク::
  • :レンチ:
  • :ok_hand:
  • :建設作業員:
  • :鯨:
  • :clap: