banner
lMingyul

lMingyul

记录穿过自己的万物
jike
twitter
github
bilibili

常用系列-Gitコマンド

常用系列は、自分がプログラミングでよく使うものを記録するものであり、この記事は常用系列の第 2 篇で、日常的に使用する Git コマンドを記録し、必要なときに参照できるようにするためのものです。Git は GUI インターフェースを提供していますが、私は Git の GUI ソフトウェアが多くあると思いますが、最も一般的なコマンドを習得することは、優れたプログラマーが行うべきことです。結局のところ、コマンドはどこでも同じですが、GUI ソフトウェアがいつ使えなくなるかもしれません🐶、また、コマンドラインモードでは Git のすべてのコマンドを実行できます。

Git の最も基本的な操作#

ファイルをローカルからリポジトリに移動するプロセス:以下は、どのコマンドを使用してファイルをローカルからリモートリポジトリにプッシュできるかを記録しています。これを基本操作と呼びます。

Git のインストール#

Mac コンピュータに Git をインストールしたい場合は、git のバージョンを確認するコマンドを入力するだけで、インストールを促されます(以前にインストールしていない場合)。

ユーザー情報の設定#

Git をインストールした後、Git の環境を設定します。これらの設定は各コンピュータで一度だけ行えばよく、もちろん設定後に変更することもできます。Git で最も一般的な設定は、ユーザー名とメールアドレスの設定です。--globalは、システム上のすべてのリポジトリに対して有効であることを示します。

Config には 3 つのスコープがあります:明示的に設定しない場合はデフォルトで local

  • local:特定のリポジトリにのみ有効
  • system:システム上のすべてのログインユーザーに有効

config の設定を表示#

Git リポジトリの取得#

通常、リポジトリを取得する方法は 2 つあります:

  • ローカルディレクトリを Git リポジトリに変換する
  • 他の場所からリポジトリをコピーしてローカルに持ってくる

既存のディレクトリでリポジトリを初期化#

このコマンドは、現在のディレクトリに.gitディレクトリを作成し、その中に初期化されたリポジトリのすべてのファイルを含みます。

リポジトリをクローン#

このコマンドは、リモート GitHub の libgit2 リポジトリからすべてのものを現在のディレクトリにプルします。

ファイルの状態を記録#

ファイルの状態には 2 種類あります:追跡されている、追跡されていない。追跡されているとは、現在 Git がこのファイルのすべての変更(変更、削除、名前変更)を記録できることを意味します。

ファイルの状態を確認#

新しいファイルを追跡#

このコマンドを使用すると、ファイルは Git の一時的な領域に追加されます。一時的な領域内のファイルは、リモートリポジトリにプッシュされる候補者です。

差分を比較#

一時的な領域にあるファイルと未追跡のファイルの違いを比較します。

通常、ファイルを多く変更した場合、どのファイルが変更されたかを忘れやすくなります。このとき、どのような変更を行ったかを確認するためにdiffコマンドを使用します。

一時的な領域内のファイルと前回のコミット時のファイルの違いを比較したい場合は、以下のコマンドを使用できます。

異なるコミット間の違いを比較することもできます。

ファイルとフォルダの名前変更#

git mv は、Git でファイルまたはフォルダの名前を変更または移動するためのコマンドです。

更新をコミット#

一時的な領域に今回コミットしたいファイルが含まれている場合、commitコマンドを使用してファイルの変更をコミットできます。

ファイルをリモートにプッシュ#

リモートリポジトリを追加#

リモートリポジトリからクローンしたファイルでない場合、ローカルで自分で作成した Git リポジトリの場合、リモートリポジトリにプッシュする前にプッシュするリポジトリを追加する必要があります。

プッシュ#

このコマンドは、master ブランチのコードをリモートの origin サーバーにプッシュすることを示します。

これで、ファイルが作成されてから最終的にリモートリポジトリに同期されるプロセスが完了しました。

次に、Git を使用する過程で遭遇したいくつかの状況で使用するコマンドを記録します。

コミット操作#

前回(最近の)コミットを修正#

  • 前回のコミットの情報を修正
  • 前回のコミットに基づいて再度変更またはファイルを追加

これらの状況では、以下のコマンドを使用できます。


クエリ#

ここでは、Git のシナリオでさまざまな必要なクエリを記録します。

コミット履歴を確認#

プロジェクト全体の履歴コミット記録#

出力される内容は次のとおりです:

  • 各コミットの SHA-1 チェックサム
  • コミット者の名前
  • メールアドレス
  • コミット日時
  • コミットメッセージ

ファイルの履歴コミット記録#

単一のファイルの各コミット記録を確認します。

各行のコミット記録#

任意のファイルの各行の最後の変更のコミット記録を表示できます。

バグを探す#

多くの場合、現在のブランチに問題が発生しましたが、どこに問題があるかわからない場合、git bisectコマンドを使用して、どのコードのコミットがエラーを引き起こしたかを探すことができます。

このコマンドは、二分探索の原理を使用します:

二分【コードに問題がないコミット ~ 現在問題のあるブランチ】の範囲を通じて、問題がある可能性のあるコミットを見つけます。

git bisect startコマンドでエラーを探し始めます。そのフォーマットは次のとおりです:

終点は最近のコミット、起点は以前のコミットです。これらの間のこの履歴がエラーの範囲です。

どの起点のコミットが問題ないかわからない場合は、最初のブランチを選択できます。

上記のコマンドを実行すると、現在のコードはこの範囲の中間のコミットに切り替わります。

その後、現在のコードをテストできます。問題がなければ、以下のコマンドを実行してこのコミットを良好としてマークします。

問題がない場合、エラーはコードの履歴の後半に導入されたことを意味します。上記のコマンドを実行すると、Git は自動的に後半の中点に切り替わります。

その後、再度テストを行い、問題がある場合はこのコミットを問題ありとしてマークします。

ここで終わりではありません。問題があるのは今回だけですが、最初に問題があったコミットを見つける必要があります。

次に、このプロセスを繰り返し、問題が発生したコミットを見つけるまで続けます。この時、Git は次のようなメッセージを表示します。

その後、このコミットでどのファイルが変更されたかを分析し、エラーの原因を分析できます。

注意:コードの欠陥は自分で判断する必要があり、Git はどこに問題があるかを分析することはできません。

その後、git bisect resetコマンドを使用してエラーを探すのを終了し、最近のコードのコミットに戻ります。

内容を探す#

Git は Linux コマンドと同様に、grepと組み合わせて使用できます。


取り消し#

Git を操作していると、エラーが発生することが避けられません。エラーを修正する方法は、一般的には再度修正するか、問題がない状態に戻すことです。

ファイルの取り消し#

作業ディレクトリの操作#

  1. 一時的な領域に追加されていない変更をすべて取り消します。
  1. 作業ディレクトリの変更を一時的な領域に対して取り消します。一時的な領域に対応するファイルがない場合は、HEAD が指すバージョンに戻ります。

一時的な領域の操作#

  1. 一時的な領域のファイルの変更を取り消します(unstage)、作業ディレクトリに戻します。

バージョンの取り消し#

コミットバージョン後、リモートで競合が発生し、ブランチをマージできない場合、git resetを使用してバージョンを戻し、競合を処理した後に再度プッシュします。


スタック操作#

開発中に、ある要求が一定の程度まで進んでおり、ローカルコードが多く変更されているが、突然緊急に処理する必要があるバグが発生した場合、すでに変更されたコードは Git のスタックに保存することができます。バグが処理された後、現場に戻って要求の開発を続けます。


ブランチ操作#

ブランチの基本操作#

マージ#

2 つのブランチをマージするために使用されます。

リベース#

ブランチのマージにも使用されます。

ブランチのマージ操作は、基本的にマージと同じです。

もし git rebase が競合に遭遇した場合:

  1. 最初に手動で競合を解決し、新しく変更されたファイルを一時的な領域に追加します git add .
  2. その後、git commitは必要なく、直接git rebase --continueを実行します。

git mergegit rebaseの違いは何でしょうか?

  • git mergeが完了した後は、マージ前のブランチが表示されますが、git rebaseが完了した後は、以前のマージのブランチ記録は表示されません。
  • ブランチのマージの順序も異なります。

詳細はこのブログを参照してください git merge と git rebase 小結

チェリーピック#

指定されたコミットを現在のブランチにマージします。

もしcherry-pickの過程で競合が発生した場合、手動で競合を解決した後、--continueコマンドを使用してプロセスを続行します。

  1. コードの競合を解決した後、変更されたファイルを再度一時的な領域に追加します git add .
  2. 次のコマンドを使用して、Cherry pick プロセスを続行します。

参考資料#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。