DUICUO

30分:Gitコマンド初心者から諦めるまで

[ xjtuhitさんのブログより引用]

[[169448]]

このチュートリアルは、グラフィックツールの初心者から経験豊富なユーザーまでを対象としています。誰でもすぐに使い始められるように支援することを目的としています。

Git は現在非常に人気があり、大規模なオープンソース プロジェクト、チーム開発、さらには独立した開発者や学生にも広く使用されています。

初心者は、様々なコマンドやパラメータに圧倒されがちです。しかし、実際には、最初からすべてのコマンドの目的を理解する必要はありません。まずはシンプルで強力なコマンドをいくつかマスターし、徐々に使いこなせるようになっていけば良いのです。(この記事ではその点について解説します。)さあ、始めましょう!

基本的な理解

`git`コマンドは、ファイルの変更を追跡・記録するためのコマンドラインツールの集合体です。例えば、ファイルの保存、比較、分析、マージなどが可能です。このプロセスはバージョン管理と呼ばれます。SVN、Mercurial、Perforce、CVS、Bitkeepeなど、既に利用可能なバージョン管理システムは数多くあります。

Gitは分散型です。つまり、中央サーバーに依存しません。どのマシンでもローカルバージョン管理システム(リポジトリ)を持つことができます。複数人での共同作業には、情報を同期するためのオンラインリポジトリが必要です。GitHubとBitBucketはまさにこれを実現しています。

1. Gitをインストールする

git のインストールは非常に簡単です:

  • Linux - コンソールを開き、パッケージマネージャーを使ってインストールします。Ubuntuでのコマンドは以下のとおりです。
    1. <span style= "color:rgb(0,0,0);" >sudo apt-get install git- all <br></span>
  • Windows - グラフィカル ツールとコマンド ライン エミュレーターが含まれているため、Git for Windows が推奨されます。
  • OS X - 最も簡単な方法は、コマンドラインから実行される Homebrew を使用してインストールすることです。
    1. <span style= "color:rgb(0,0,0);" >brew で git をインストール<br></span>

グラフィカルツールをご利用になりたい場合は、GitHub Desktop または Sourcetree をお勧めします。ただし、コマンドラインの使用もお勧めします。以下の内容はすべてコマンドラインから実行したものです。

2. Gitを設定する

Gitをインストールしたら、まずはユーザー名とメールアドレスなどの情報を設定します。ターミナルを開き、以下のコマンドを実行してください。

  1. <span style= "color:rgb(0,0,0);" >$ git config --global user.name "私の名前"<br>$ git config --global user.email [email protected]<br></span>  

これら 2 つの設定を構成すると、ユーザーは誰が何を行ったかを把握でき、すべてがより整理されるようになります。

3. 新しいリポジトリを作成する - git init

Gitはプロジェクト内のすべてのファイルと履歴を保存します。新しいリポジトリを作成するには、まずプロジェクトディレクトリに移動し、`git init`を実行します。すると、Gitは`.git`という名前の隠しフォルダを作成し、そこにすべての情報が保存されます。

デスクトップに git_exercise という名前のフォルダーを作成し、ターミナルを開きます。

  1. <span style= "color:rgb(0,0,0);" >$ cd Desktop/git_exercise/<br>$ git init<br></span>

さて、プロジェクトはまだ空です。新しいhello.txtファイルを作成してみましょう。

4. ステータスを確認する - git status

`git status` も非常に重要なコマンドです。リポジトリの現在の状態(最新かどうか、どのような更新が行われたかなど)を表示します。`git status` を実行します。

  1. <span style= "color:rgb(0,0,0);" >$ git status <br><br>ブランチ master<br><br> 最初のコミット<br><br> 追跡されていないファイル:<br> ( "git add ..." を使用)  コミットされる内容含める内容)<br> <br> hello.txt<br></span>

Gitはhello.txtが新しいファイルであるため追跡されていないと報告しています。Gitは、このファイルの変更を追跡すべきか、それとも単に無視すべきか判断できません。新しいファイルを追跡するには、ステージングする必要があります。

5. ステージング - git add

Gitにはステージングエリアと呼ばれる概念があり、これはコミットする可能性のあるすべての変更を保持する空白のキャンバスと考えることができます。最初は空ですが、`git add` コマンドでコンテンツを追加し、`git commit` コマンドでコミットできます。

この例には 1 つのファイルのみが含まれています。

  1. <span style= "color:rgb(0,0,0);" >$ git add hello.txt<br></span>

ディレクトリのすべてのコンテンツを送信する必要がある場合は、次のように実行できます。

  1. <span style= "color:rgb(0,0,0);" >$ git add -A<br></span>

`git status` を再度使用して確認します。

  1. <span style= "color:rgb(0,0,0);" >$ git status <br><br>ブランチ master<br> <br> 最初のコミット<br><br>コミットする変更: <br> ( "git rm --cached ..."を使用)  ステージ解除する)<br> <br> 新しいファイル: hello.txt<br></span>

ファイルがコミットされました。ステータス情報にはステージングエリア内のファイルにどのような変更が加えられたかが表示されますが、ここでは完全に新しいファイルをコミットしました。

6. コミット - git commit

コミットとは、リポジトリがデリバリーステータスに到達したことを意味します。これは通常、小さな機能の完了を意味します。これはスナップショットのようなもので、タイムマシンのように過去へ戻ることができます。

コミットを作成するには、ステージング領域にデータを送信し (git add)、次の操作を行う必要があります。

  1. <span style= "color:rgb(0,0,0);" >$ git commit -m "最初のコミット。" <br></span>

これによりコミットが作成されます。-m "Initial commit." オプションは、このコミットの説明を提供します。わかりやすい説明情報を使用することをお勧めします。

遠隔倉庫

これまでの操作はローカルで行われ、.git ファイルに保存されていました。共同開発を行うには、コードをリモートリポジトリにデプロイする必要があります。

1. リモートリポジトリに接続する - git remote add

リモートリポジトリにアップロードするには、まずリンクを確立する必要があります。このチュートリアルでは、リモートリポジトリのアドレスは https://github.com/tutorialzine/awesome-project ですが、GitHub または BitBucket で独自のリポジトリを設定し、ステップバイステップで試すことをお勧めします。

テスト用のリモート リポジトリを追加します。

  1. <span style= "color:rgb(0,0,0);" >$ git リモート追加origin https://github.com/tutorialzine/awesome-project.git<br></span>

プロジェクトは複数のリモートリポジトリを同時に持つことができ、通常は区別するために異なる名前が付けられます。メインのリモートリポジトリは通常、「origin」と呼ばれます。

2. サーバーにアップロードする - git push

コードをサーバーにコミットするたびに、`git push` を使用します。

`git push` コマンドは、リモート リポジトリの名前とブランチの名前の 2 つの引数を取ります。

  1. <span style= "color:rgb(0,0,0);" >$ git push origin master <br><br>オブジェクトをカウント中: 3、完了。<br>オブジェクトの書き込み中: 100% (3/3)、212 バイト | 0 バイト/秒、完了。<br>合計 3 (デルタ 0)、再利用 0 (デルタ 0)<br>宛先<br> * [新しいブランチ] master -> master<br></span>

ご利用のサーバーによっては、プッシュ処理中に本人確認が必要になる場合があります。すべてがスムーズに進んだら、ブラウザでリモートブランチを確認してください。hello.txt がそこに保存されているはずです。

3. リポジトリのクローン - git clone

GitHub でホストされているオープンソースプロジェクトでは、他のユーザーがあなたのコードを閲覧できます。`git clone` を使ってローカルマシンにダウンロードできます。

  1. <span style= "color:rgb(0,0,0);" >$ git clone https://github.com/tutorialzine/awesome-project.git<br></span>

ローカルにも新しいリポジトリが作成され、GitHub 上のブランチが自動的にリモート ブランチとして設定されます。

4. サーバーからコードをプルする - git pull

リポジトリのコードを更新すると、他のユーザーは `git pull` コマンドを使用して変更をプルできます。

  1. <span style= "color:rgb(0,0,0);" >$ git pull origin master<br> From <br> * branch master -> FETCH_HEAD<br>すでに最新です <br> </span>

まだ誰も提出していないので、変更はありません。

支店

新しい機能を開発する際は、ブランチと呼ばれる別の領域で開発するのが最適です。ブランチは互いに独立しており、独自の履歴を持ちます。その理由は次のとおりです。

安定したバージョンのコードは壊れません。

異なる開発者が同時に異なる機能を開発できます。

開発者は、自分の環境が他の開発者によって混乱させられることを心配することなく、自分のブランチに集中できます。

不確実性が生じる前に、同じ機能に複数のバージョンを用意して簡単に比較できるようにすることができます。

1. 新しいブランチを作成する - git branch

各リポジトリのデフォルトのブランチはmasterと呼ばれます。新しいブランチを作成するには、以下の手順を実行します。

  1. <span style= "color:rgb(0,0,0);" >$ git ブランチ amazing_new_feature<br></span>

現在のブランチと同じポイントから始まる、amazing_new_feature という名前の新しいブランチが作成されました。

2. ブランチを切り替える - git checkout

`git branch` だけを使用してブランチのステータスを表示できます。

  1. <span style= "color:rgb(0,0,0);font-size:14px;" >$ git ブランチ<br> amazing_new_feature<br> * master<br></span>

アスタリスク(*)は、現在アクティブなブランチがmasterであることを示します。ブランチを切り替えるには、`git checkout`を使用してください。

  1. <span style= "color:rgb(0,0,0);" >$ git checkout amazing_new_feature<br></span>

3. ブランチをマージする - git merge

amazing_new_feature ブランチでのタスクは、feature.txt ファイルを追加することです。ファイルを作成し、ステージングエリアに追加してコミットしましょう。

  1. <span style= "color:rgb(0,0,0);" >$ git add feature.txt<br>$ git commit -m "新機能が完了しました。" <br></span>

新しいブランチのタスクが完了しました。マスターブランチに戻ってください。

  1. <span style= "color:rgb(0,0,0);" >$ git チェックアウト マスター<br></span>

ファイルを確認すると、先ほど作成した feature.txt ファイルがマスターブランチに存在しなかったため、見つからないことがわかります。`git merge` コマンドを使って、amazing_new_feature ブランチをマスターブランチにマージしてください。

  1. <span style= "color:rgb(0,0,0);" >$ git merge amazing_new_feature<br></span>

はい!次にamazing_new_featureブランチを削除します。

  1. <span style= "color:rgb(0,0,0);" >$ git ブランチ -d amazing_new_feature<br></span>

高度な

この記事の最後のセクションでは、さらに高度で実用的なテクニックについて説明します。

1. 2 つの異なる提出物の違いを比較します。

各コミットには一意のIDが付与されます。すべてのコミットとそのIDを表示するには、`git log` を使用します。

  1. <span style= "color:rgb(0,0,0);" >$ git log <br><br> commit ba25c0ff30e1b2f0259157b42b9f8f5d174d80d7<br>作成者: Tutorialzine<br>日付: 2016年5月30日(月) 17:15:28 +0300<br><br> 新機能が完成しました <br><br> commit b10cc1238e355c02a044ef9f9860811ff605c9b4<br>作成者: Tutorialzine<br>日付: 2016年5月30日(月) 16:30:04 +0300<br><br> hello.txt内容を追加しました<br> <br> commit 09bd8cc171d7084e78e4d118a2346b7487dca059<br>作成者: Tutorialzine<br>日付: 土 5月 28日 17:52:14 2016 +0300<br><br> 最初のコミット<br></span>

ID は長いですが、文字列全体をコピーする必要はなく、最初の部分だけで十分です。

特定のコミットで何が更新されたかを確認するには、`git show` を使用します。

  1. <span style= "color:rgb(0,0,0);" >$ git show b10cc123 <br> commit b10cc1238e355c02a044ef9f9860811ff605c9b4<br>作成者: Tutorialzine<br>日付: 2016 年 5 月 30 日月曜日 16:30:04 +0300<br><br> hello.txt内容を追加しました<br> <br>diff --git a/hello.txt b/hello.txt<br>index e69de29..b546a21 100644<br>--- a/hello.txt<br>+++ b/hello.txt<br>@@ -0,0 +1@@<br>+今日はいい天気ですね<br></span>  

2つのコミットの違いを確認するには、`git diff [commit-from]..[commit-to]` を使用します。構文:

  1. <span style= "color:rgb(0,0,0);" >$ git diff 09bd8cc..ba25c0ff<br><br>diff --git a/feature.txt b/feature.txt<br>新しいファイル モード 100644<br>インデックス 0000000..e69de29<br>diff --git a/hello.txt b/hello.txt<br>インデックス e69de29..b546a21 100644<br>--- a/hello.txt<br>+++ b/hello.txt <br>@@-0,0 +1@@<br>+今日はいい天気ですね。<br></span>  

最初のコミットと最後のコミットを比較することで、すべての変更を確認できます。もちろん、`git difftool` コマンドを使用する方が便利です。

2. ファイルを以前のバージョンにロールバックします。

Git を使用すると、特定のファイルを特定のコミットにロールバックできます。これも `git checkout` を使用して実行できます。

以下の例では、hello.txt を初期状態にロールバックします。ロールバックするコミットとファイルのフルパスを指定する必要があります。

  1. <span style= "color:rgb(0,0,0);" >$ git checkout 09bd8cc1 hello.txt<br></span>

3. ロールバックコミット

最新のコミットにファイルを追加してしまった場合は、`git commit --amend` を使って修正できます。これにより、最新のコミットがステージングエリアにプッシュされ、再度コミットが試行されます。

最新のコミットではない場合など、より複雑な状況では、`git revert` を使用できます。

最新のコミットも HEAD としてエイリアスされます。

  1. <span style= "color:rgb(0,0,0);" >$ git revert HEAD<br></span>

その他の提出物では次の ID を使用できます:

  1. <span style= "color:rgb(0,0,0);" >$ git revert b10cc123<br></span>

混合コミットでは競合が頻繁に発生します。後続のコミットでファイルが変更されると、Git は変更を適切にロールバックできません。

4. マージの競合を解決する

ブランチをマージしたり、他の人からコードをプルしたりすると、競合が発生することがよくあります。Git が競合を自動的に処理してくれる場合もありますが、ほとんどの場合、手動で処理する必要があります。

たとえば、ジョンとティムはそれぞれ自分のブランチに 2 つのコード部分を作成しました。

ジョンの好きなところ:

  1. <span style= "color:rgb(0,0,0);" >// forループを使用して console.log内容を出力します。<br> for (var i=0; i<arr.length; i++) {<br>console.log(arr[i]);<br>br></span>

Tim は forEach が好きです:

  1. <span style= "color:rgb(0,0,0);" >// forEach を使用してconsole.log の内容を出力します。<br>arr.forEach( function (item) {<br>console.log(item);<br>});<br></span>

ここで、ジョンがティムのコードを取得しようとしているとします。

  1. <span style= "color:rgb(0,0,0);" >$ git merge tim_branch <br><br>print_array.js を自動マージ中<br>CONFLICT (content): print_array.jsマージ競合が発生しました<br>自動マージに失敗しました。競合を修正し  それから 結果を送信します

この時点では、Git は John と Tim のどちらがより良い書き方をしたのかわからないため、競合を解決する方法がわかりません。

つまり、コードにマーカーが挿入されます。

  1. <span style= "color:rgb(0,0,0);" ><<<<<<< HEAD<br>// forループを使用して、console.log内容を出力します <br> for (var i=0; i<arr.length; i++) {<br> console.log(arr[i] ) ;<br>});<br>>>>>>>> Tim のコミット。<br></span>

==== 記号の上のコードは最新のコミットで、その下のコードは競合しているコードです。この競合を解決する必要があります。組織委員会メンバー間で議論した結果、どちらのコミットもゴミであることが全員一致で決定されました。どちらも使用すべきではありません。コードを以下のように変更する必要があります。

  1. <スパン  style = "color:rgb(0,0,0);" > // for ループや forEach は使用しません。 < br > // Array.toString() を使用して< br > console.log contents.console.log(arr.toString()); < br > </ span >  

さて、もう一度送信してみましょう。

  1. <span style= "color:rgb(0,0,0);" >$ git add -A<br>$ git commit -m "配列印刷の競合が解決されました。" <br></span>

大規模プロジェクトでは、このプロセスで問題が発生する可能性が高くなります。GUIツールが役立ちます。`git mergetool` を使用してください。

5. .gitignore を設定する

ほとんどのプロジェクトでは、コミットしたくないファイルやフォルダが存在します。誤ってコミットしてしまうのを防ぐには、.gitignore ファイルが必要です。

  1. プロジェクトのルート ディレクトリに .gitignore ファイルを作成します。
  2. ファイル内の送信する必要のないファイル名とフォルダー名を、各行に 1 つずつリストします。
  3. .gitignore ファイルは、通常のファイルと同様にコミットする必要があります。

通常無視されるファイルは次のとおりです:

  1. ログファイル
  2. タスクランナービルド
  3. node_modulesなどのフォルダ
  4. IDEによって生成されたファイル
  5. 個人的なメモ

例えば:

  1. <span style= "color:rgb(0,0,0);" >*.log<br>build/<br>node_modules/<br>.idea/<br>my_notes.txt<br></span>