yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。

この記事は3年以上前に書かれた記事で内容が古い可能性があります

Gitの基本操作

2018-08-05

Gitの基本についてまとめ

前提

基本

リポジトリを作成する

GitHubの画面でリポジトリ作成
※GitHub使うにはアカウント登録が必要

作成すると以下のような画面になるので、インストラクションの通り操作すれば良いのですが、

一応以下より詳細メモ、CLIで操作します

操作概要

これから操作する概要は以下の通り、右のWorkSpaceでの変更を左のRemote Repositoryに送って行くイメージ
なぜこんなに多段になっているかというと、変更点などを後々管理しやすくするためで、特にチーム開発などをすると利点を理解できるらしい

gitを始める

% git init
Initialized empty Git repository in /Users/yoshi/git_test/.git/

試しにREADME.mdファイルを作ってみる

% echo "# git_test" >> README.md

git addとgit commit

% git add README.md
% git commit -m "first commit"
[master (root-commit) c46258e] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

リモートブランチの追加とgit push

% git remote add origin https://github.com/yoshi-island/git_test.git
% git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 218 bytes | 218.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/yoshi-island/git_test.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

確認

これで晴れてリポジトリが作成できた

参考:Commitまでの作業で確認するためのコマンド

ステージング (git add)状況を確認する時には「git status」、変更差分を確認したい時には「git diff」を使う

git add前のステージング状況確認

% git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

git add前の変更差分確認

% git diff
diff --git a/README.md b/README.md
index 1e523a5..2ccc2e5 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
 # git_test
+# change1

git addとステータス確認

% git add README.md
% git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   README.md

Git Clone

次は、もともとあるリモートリポジトリをローカルにダウンロードする作業

GitHubのリポジトリ画面からURLをコピー

コピーしたURLをgit cloneに続けて入力すればローカルにリモートリポジトリをダウンロードすることができる

% git clone https://github.com/yoshi-island/git_test.git
Cloning into 'git_test'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
% cd git_test
% cat README.md
# git_test

Commitを消したい

Commitをしてしまったが、消したい時

例えば、こんな感じで先ほどのREADMEファイルに一行ずつ追加→Commitを繰り返したとする

% cat README.md
# git_test
# change1
# change2
# change3
# change4
# change5

commit履歴は「git log」で確認できる

% git log
commit bdcc9032a31e1f7cfe902cb4e330fadeea64f35c (HEAD -> master)
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:05:15 2018 +0900

    change5

commit 4e59834f5f47a4b626affc0a2210eed1856f94cf
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:05:02 2018 +0900

    change4

commit 3d3bb86234045bc3bc7b360cf67ccbea6c9c2821
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:04:39 2018 +0900

    change3

commit a4fa11fa778421a6fe27a76652dce19aa4994fec
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:04:26 2018 +0900

    change2

commit f560b32cde86bede64e14c7220c20ab3f055d118
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:03:38 2018 +0900

    change1

commit c46258e50e103b6b8bd0256a98f8f2a6ff74fcfb (origin/master, origin/HEAD)
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 14:52:26 2018 +0900

    first commit

change3に戻したいとして、一旦Commit IDを使って差分を確認する

% git diff bdcc9032a31e1f7cfe902cb4e330fadeea64f35c 3d3bb86234045bc3bc7b360cf67ccbea6c9c2821
diff --git a/README.md b/README.md
index a18fdf7..a57677a 100644
--- a/README.md
+++ b/README.md
@@ -2,5 +2,3 @@
 # change1
 # change2
 # change3
-# change4
-# change5

よければ戻したいCommit IDを指定して戻す
直前ならHEAD^とかで戻せるが、自分的にはIDをしっかり指定した方が良いと思っている

% git reset --soft 3d3bb86234045bc3bc7b360cf67ccbea6c9c2821

logを確認すると戻っている

% git log
commit 3d3bb86234045bc3bc7b360cf67ccbea6c9c2821 (HEAD -> master)
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:04:39 2018 +0900

    change3

commit a4fa11fa778421a6fe27a76652dce19aa4994fec
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:04:26 2018 +0900

    change2

commit f560b32cde86bede64e14c7220c20ab3f055d118
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 15:03:38 2018 +0900

    change1

commit c46258e50e103b6b8bd0256a98f8f2a6ff74fcfb (origin/master, origin/HEAD)
Author: yoshiisland <yoshi@yoshiisland.com>
Date:   Sun Aug 5 14:52:26 2018 +0900

    first commit

addを消したい

addを消すのはcommitを消すより簡単で「git reset」だけ

% git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   README.md

%
% git reset
Unstaged changes after reset:
M README.md
%
% git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

今回はここまで。
続きはこちら
Gitの基本操作_その2