Git講習第4話「Gitで作業開始：コミットからプルまで」

# この記事について
本記事は社内で実施したGit講習のスライドを元に作成された記事です。
Gitを使ってはいるものの、どういう構造になっているかとか仕組みについてはあまりわかっていないという方たちを対象にしています。
# 前回
https://qiita.com/sho_fcafe/items/20a7bc7c0e0922211bec
# イントロダクション
![スクリーンショット 2023-07-11 23.35.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/ed4e028c-9a92-6d1e-9fe4-e07c1ac464b6.png)
# 用語の解説
実際にGitを操作してみる前に幾つかの用語について説明しておきます
## ワークツリー
ワークツリー（または作業ディレクトリ、作業ツリーとも呼ばれます）は、実際に作業しているディレクトリの事です。
![スクリーンショット 2023-07-11 23.38.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/60774886-def2-0c8b-e161-75406a9269bf.png)
## インデックス
インデックス（またはステージングエリア）は、Gitが次のコミットでリポジトリの記録するファイルの集合体です。
![スクリーンショット 2023-07-11 23.39.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/7edace49-cddd-7982-a776-a5c94fd5ab8f.png)
## コミット
コミットは、インデックスをローカルリポジトリに保存することです。
![スクリーンショット 2023-07-11 23.40.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/152b2e83-aeff-a761-fdfa-327cceaea7cf.png)
## プッシュ
pushは、ローカルリポジトリの変更をリモートリポジトリにアップロードすることです。
![スクリーンショット 2023-07-11 23.42.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/dc31cc7e-1130-abf2-aa79-2781bb2551f2.png)
## プル
pullは、リモートリポジトリの最新の変更をあなたのローカルリポジトリにダウンロードし、その変更を統合するために使用されます。
![スクリーンショット 2023-07-11 23.43.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/0f03f032-c0dc-9589-f162-7e74bd27bcec.png)
# 実践
## コマンドを使っての実践
まずはワークツリーとなる作業ディレクトリを用意します。
下記のコマンドでnew-repoという名前のディレクトリを作成し、そのディレクトリに移動をします
```bash
mkdir new-repo
cd new-repo
```
次にローカルリポジトリを作成しましょう
下記のコマンドでローカルリポジトリが作成されます。
```bash
git init
```
下記のようなメッセージが表示されたら成功です。
```
Initialized empty Git repository in /Users/kouhai/new-repo/.git/
```
では、次にhello.txtというファイルを作成して、そこに「Hello, Git」と書き込んでみましょう。
```bash
echo "Hello, Git" > hello.txt
```
ファイルを変更したのでこのファイルをリモートリポジトリに上げてみましょう。
まずはインデックスにファイルを追加します。
```bash
git add hello.txt
```
インデックスにファイルを追加したら次はコミットをします。
コミットをする時にはコミットメッセージというどんな内容をコミットしたかを表すメッセージをつける必要があります。
下記のコマンドの「Initial commit」の部分がコミットメッセージです。
```bash
git commit -m "Initial commit"
```
コミットが成功すると下記のようなメッセージが表示されます。
```
[main (root-commit) 1842a48] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt
```
## GitHubにリモートリポジトリを作る
GitHubにリモートリポジトリを作ってみましょう。
GitHubにログインしてください。
![スクリーンショット 2023-07-12 0.00.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/07e6f326-29f1-17f7-66d0-2096bc6f7b2d.png)
![スクリーンショット 2023-07-12 0.00.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/58728595-a464-6ab0-44b5-2b15163825d8.png)
![スクリーンショット 2023-07-12 0.02.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/3329602a-1653-51ca-7e3c-3b512ec0df8e.png)
これでGitHub上にリモートリポジトリが作成されました。

## リモートリポジトリにPUSHする
リモートリポジトリができたのでPUSHしてみましょう。
まずはローカルリポジトリとリモートリポジトリを紐付けします。
```bash
git remote add origin https://github.com/xxxxxx/test-repo.git
```
「https://github.com/xxxxxx/test-repo.git」の部分が先ほどコピーしておいたGitのURLになります。
「origin」の部分はリモートリポジトリの名前です。任意の名前をつけられますが、originとするのが一般的なようです。

リモートリポジトリが追加できたらいよいよPUSHです。
下記のコマンドを実行してみましょう。
```bash
git push -u origin main
```
このコマンドは「originというリモートリポジトリのmainブランチにPUSHする」という意味です。
これが成功すると下記のようなメッセージが表示されるはずです。
```
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 223 bytes | 223.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/xxxxxx/test-repo.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.
```
![スクリーンショット 2023-07-12 0.10.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/b2623d6a-d587-e4c6-a6a7-b96ea639d55f.png)
## リモートリポジトリをクローンする
次に他人が作ったリモートリポジトリをコピーしてローカルリポジトリを作成（クローンすると言います）してみましょう。
```bash
git clone https://github.com/xxxxx/test-repo.git new-repo-clone
```
このコマンドは「https://github.com/xxxxx/test-repo.gitというリモートリポジトリをnew-repo-cloneディレクトリにクローンする」という意味です。
## pullする
プルを実行する場合は下記のコマンドを実行してください
```bash
git pull 
```
## VSCodeでの実践
VSCodeでもGitの操作ができますので操作方法を見て行きましょう。
![スクリーンショット 2023-07-12 0.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/b515f9ce-923e-5034-eb35-5af34af19263.png)
![スクリーンショット 2023-07-12 0.24.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/aef37d6f-cccb-0099-715f-9515e6a5a086.png)
![スクリーンショット 2023-07-12 0.24.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/46eab18a-f5ef-f9a1-96d6-c2f8082d1bbb.png)
![スクリーンショット 2023-07-12 0.25.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/4b0b0304-499a-e124-1f8a-799a30c70c7e.png)
![スクリーンショット 2023-07-12 0.25.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/79d7b65a-e945-8d6e-c653-711815819ee8.png)
![スクリーンショット 2023-07-12 0.26.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/76e50289-4585-3000-1dd1-0fbb81248c43.png)
![スクリーンショット 2023-07-12 0.27.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/f94e3150-e931-c7dd-f190-4af9032cdbb2.png)
![スクリーンショット 2023-07-12 0.27.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/d51d06e2-b7fd-15a2-571c-36c18d238ef3.png)
![スクリーンショット 2023-07-12 0.28.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/bf86f3c4-6def-dffd-c5b2-a8b080557b96.png)
![スクリーンショット 2023-07-12 0.28.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/1f894bb1-ab39-ea3b-a74a-125ec100a021.png)
![スクリーンショット 2023-07-12 0.29.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/e571ce68-cca5-09bf-f22a-1c0d51515704.png)
![スクリーンショット 2023-07-12 0.29.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/dde6e8e5-1e86-f6d4-4633-3ae0736f7943.png)
![スクリーンショット 2023-07-12 0.30.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/6e13f2df-3aba-75b1-145d-8a9630310d47.png)
![スクリーンショット 2023-07-12 0.30.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/18ca7074-43d3-4c60-81ef-a9ebf14d53d4.png)
## SourceTreeでの実践
SourceTreeを使う場合の操作方法も見て行きましょう。
![スクリーンショット 2023-07-12 0.32.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/17df03de-621c-bfdf-d516-3624e675203b.png)
![スクリーンショット 2023-07-12 0.33.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/4ad29fe8-66ee-cc7b-0853-5e53c59a5e1f.png)
![スクリーンショット 2023-07-12 0.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/688dbf5a-10af-2422-f1f5-17347788c7ed.png)
![スクリーンショット 2023-07-12 0.35.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/00dc03af-4ed7-1550-4a14-5d16ef0d6723.png)
![スクリーンショット 2023-07-12 0.36.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/844aabf4-6401-f8f2-5358-9fc0774f7b52.png)
![スクリーンショット 2023-07-12 0.36.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/ba71c766-eee4-0910-c09b-c6f8d4988f3f.png)
![スクリーンショット 2023-07-12 0.36.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/4bf959bc-333c-07c0-c1a6-c89fafb69f37.png)
![スクリーンショット 2023-07-12 0.37.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/d7b7b67b-77da-6e49-20f3-efa787212261.png)
![スクリーンショット 2023-07-12 0.38.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/7a4d622e-f67b-e443-81eb-e95585b07098.png)
![スクリーンショット 2023-07-12 0.38.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/22f6a876-0777-03f3-6a8b-b4a43bb9c78b.png)
![スクリーンショット 2023-07-12 0.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/032c5c85-c609-2989-c4ed-2ec97a51cf76.png)
![スクリーンショット 2023-07-12 0.39.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/4e01dafb-0281-0695-fa78-7f3a81770a50.png)
![スクリーンショット 2023-07-12 0.40.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/5f04ceb0-608f-f238-ed2c-c356b3e439e9.png)

# pull/push/fetch
実践を通してpullとpushについて理解を深めたところでもう少し詳しくみていきましょう
pushは、ローカルリポジトリの変更をリモートリポジトリにアップロードするために使用されます。
pullは、リモートリポジトリの最新の変更をあなたのローカルリポジトリにダウンロードし、その変更を統合するために使用されます。
fetchは、リモートリポジトリの最新の情報をローカルリポジトリにダウンロードするために使用されます。
![スクリーンショット 2023-07-12 0.41.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/da41f396-d086-8c6d-9589-0f67b3ffc414.png)
# gitignore
下記のようなファイルはGitで管理したくありません。
・環境変数が定義された設定ファイル
・パッケージ管理ソフトで管理されているパッケージ類
・ログファイル
それらのファイルはgitignoreファイルに記載することでGit管理から外すことができます。
![スクリーンショット 2023-07-12 0.43.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/683a5d80-4ce6-7567-b7c5-9d6fa30a2138.png)
# 次回
第5話「ブランチの理解：作業の分岐点」へと続きます
https://qiita.com/sho_fcafe/items/fe3dc7b80e0622f61032