本当に Git を知っていますか?

DDD
DDDオリジナル
2024-09-25 06:29:31370ブラウズ

Do you really know Git?

このブログの画像は、Scott Chacon、Ben Straub による「Pro Git」から引用しています

このブログでは、プログラミングで使用する Git 内の日常的な機能のいくつかについて、さまざまな興味深い事実について読むことができます。

開発者は、ツールが内部でどのように機能するかを知らずに、やみくもにツールを使用することがよくあります。この抽象化は良い方向に向かう一方で、物事がどのように機能するかを知ることが、熟練プログラマーとアマチュア プログラマーの違いを生むことがあります。

素晴らしい事実をいくつか見てみましょう!


1 - ショートステータス

Git を長期間使用している場合は、git status について知っているはずです。ただし、より読みやすく最小限のステータス出力を取得するオプションがあることをご存知ですか?

短いステータス フラグ -s を使用すると、よりコンパクトな形式になります。

$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

出力の左側のセクションに 2 つの列があることがわかります。左の列はステージングエリアのステータスを表し、右の列は作業ツリーのステータスを表します。時系列のアクションの順序も左から右に表されます。

上記の出力を解釈してみましょう:

  • 「M」 - 変更されていますが、ステージングされていません
  • 「MM」 - ステージングされ、その後再度修正されました。したがって、次のコミットには追加のステージが必要です。
  • 「A」 - 新しいファイルが作成され、ステージングされました
  • 「M」 - 舞台化
  • 「??」 - 新しいファイルが作成されましたが、ステージングされていません (追跡されていません)

2 - ステージングエリアをスキップする

追跡された ファイルをステージングして 1 つのコマンドですべてコミットしたい場合はどうすればよいでしょうか?

これを行うには、git commit -a -m "message" を使用します。

残念ながら、追跡されていないファイル (新しく作成されたファイル) は、この魔法のコマンドではステージングされないことに注意してください。


3 - コミット履歴を表示する

git log を使用して、リポジトリ内で行われたコミットを新しい順にリストします (最新のコミットが最初に表示されます)。

出力をカスタマイズできるさまざまなオプションがあります。便利なものをいくつか見てみましょう:

  • -{number} は、表示されるログエントリの数を制限します (例: git log -2 は最後の 2 つのエントリを表示します)
  • --stat は、各コミットのファイル数や挿入/削除数などの省略された統計を表示します
  • --pretty=oneline 各コミットを 1 行に出力します
  • --graph は、分岐とマージの履歴を示す ASCII グラフを追加します

4 - Git Restore を使用して元に戻す

ファイルのステージングを解除する場合は、git replace HEAD を使用します。変更されたファイルの変更を元に戻したい場合は、git checkout -- {file} を使用します。

両方を行う簡単な方法が登場しました! Git バージョン 2.23.0 では、ファイルのステージング解除と変更解除の両方を行う 2-in-1 機能を提供する git list が導入されました。

  • git list {file} - 変更されたファイルの変更を元に戻します
  • git list --staged {file} - ステージングされたファイルのステージングを解除します

5 - Git フェッチと Git プル

おそらく、プログラマーとして、git pull を少なくとも 1 回は使用したことがあるでしょう。さらに、git fetch について聞いたことはあるかもしれませんが、実際に使用する必要はありませんでした。さて、それが実際に何をするのか、そして git pull とどのように違うのかについて話しましょう。

フェッチは、プル内で何が起こるかの最初のステップにすぎないと考えることができます。

プルでは、​​リモート リポジトリからすべてのデータをダウンロードし、ローカル リポジトリに転送します。これがフェッチの動作です。

この時点では、ローカル リポジトリにはデータがありますが、最新の変更を作業できるように作業ディレクトリとマージされていません。プル内の次のステップはブランチとのマージで、最新の変更が作業ディレクトリに置かれます。

したがって、プルはフェッチとマージをすべて一度に行いますが、フェッチは最初のステップのみを実行します。


6 - Git エイリアス

git コマンドをカスタマイズできる方法があると言ったらどうしますか? git config を通じて、それが可能です。

頻繁に使用するコマンドのエイリアスを次のように設定できます。

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

ここでは、git commit と入力する代わりに、git ci と入力するだけです。

これは、特定のタスクをより直感的に行うのに役立つコマンドに特に役立ちます。

$ git config --global alias.unstage 'reset HEAD --'
# the double dash serves as an option separator. 
# It tells Git to treat anything after it as a filename

上記のコマンドは、次のコマンドと同等になります:

  • git unstage fileA
  • git reset HEAD -- fileA

It's also common to add a last command to see your most recent commit:

$ git config --global alias.last 'log -1 HEAD'

That's all for this blog! I hope you learned a few neat tricks for your next project with Git that will improve the quality of your workflow. Thanks for reading!

以上が本当に Git を知っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。