👋

Gitの使い方

2022/06/25に公開

Gitを始める前に

ユーザー名とEメールを設定

git config --global user.name "名前を記入"
git config --global user.email "Eメールを記入"

ブランチやコミットに色をつける

git config --global color.ui true

color.uiをONにする前に、git logというコマンドに対して

color.uiをONにしたら、git logというコマンドはこういうカラフルな内容を返してくれます

フォルダをGit Repoにする

git init

上のコマンドを実行して、こういうメッセージが出てきたらGit Repoへの設定が成功するとなります

Initialized empty Git repository in /Users/chenyian/Desktop/test/.git/

コミットを提出

フォルダにindex.htmlを一つ作り、以下のように記入

index.html
<p>Hello, world!</p>

以下のコマンドを打ちます

git add .
git commit

そして、こういう画面が出てきます

これがVimというテキストエディタです

簡単にVimの指令をまとめてみると

  • i:編集モード (insert)
  • esc: 編集モードを退出
  • :wp:保存して終了 (write and quit)

上の画面に対して、以下のように操作してください

  1. iを打つ
  2. 「This is my initial commit」という内容の英語を打つ
  3. escを打つ
  4. :wqを打ってからEnter

git add以後のファイル変更

まずはindex.htmlを以下のように変更して保存

index.html
<p>Hello, world?</p>

そして、以下のコマンドを打つ

git add .

続いて、さらにindex.htmlの内容を以下のように変更して保存

index.html
<p>Goodbye, cruel world!</p>

この時にgit statusというコマンドを打ち
以下のような結果が出ます

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   index.html

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

つまり以下の状況になりました

  • Hello, world?はトラックされた
  • Goodbye, cruel world!はまだトラックされてない

こういうのに対して以下のやり方は一般的です

git add .
git commit -m "コミットしました"

コミットは、二つの修正内容を合併し
以下のようになります

index.html
- <p>Hello, world!</p>
+ <p>Goodbye, cruel world!</p>

でも、上のやり方は二つのコマンドも使いましたから(git addgit commit
今回は一つのコマンドだけで同じ効果を出せる方法を紹介します

git commit -am "コミットしました"

BranchとMerge 他人との共同作業

Branch作成

上の例を沿えて続いて紹介します
まずはもう一つのファイル:credits.htmlを作ります

内容はこうなります

credits.html
<p>This is credit</p>

そして、現在のブレンチ一覧を見るために以下のコマンドを

git branch

返り値はこうです

* master

今回の修正のためにもう一つ新しいブレンチを作ります

git branch credits

そしてもう一回現在のブレンチ一覧を確認します

git branch

返り値はこちらです

  credits
* master

つまり、さきは「credits」というブレンチを作り出したが、現在の所属しているブレンチはまだ「master」ということを示しています

そして、その所属ブレンチを「credit」へ移動させるために、以下のコマンドを打ちます

git checkout credits

もう一度ブレンチ一覧と所属状況を確認します

git branch

返り値はこうです

* credits
  master

そして、これから修正記録をコミットします

git add .
git commit -m "新しいファイルを追加しました"

Mergeを実行

まずはブレントをmasterへ移動させます

git checkout master

そして、マージを実行

git merge credits

これで完了となります

練習

上の例によって一つのブレンチとマージを完了しましたが
この時に、例えば同僚の人から「creditsページに一つのタイトルを加えてほしい」という場面に対してはどう対処したらいいですか

まずはブレンチを「credits」へ移動させます

git checkout credits

そして、credits.htmlを編集します

credits.html
+<h1>CREDIT</h1>
 <p>This is credit</p>

続いて内容をコミット

git commit -am "タイトルを追加します"

git commit -amgit add .git commit -m "タイトルを追加します"の連続技です)

最後にマージ

git checkout master
git merge credit

Reset

新しい例を挙げます
まずは「adding」というフォルダを作り、Gitイニシャライザさせ、中にshopping.txtというアイテムリストを作ります

mkdir adding
cd adding
git init
echo "Cheese
Eggs
Strawberries
Quinoa" > shopping.txt

そして、shopping.txtの中に「Eggs」というアイテムを削除、ステージ状態にさせます

grep -v "Eggs" shopping.txt | (sleep 0.1; tee shopping.txt)
git add shopping.txt

そこで急に後悔し、以下二つの分岐を生じます

分岐① Eggsは削除すべきではなかった、元のままのリストでいてほしい

以下のコマンドで強制リセットすることができます

git reset --hard

shopping.txtは、最初の4アイテムに戻り、全ての修正内容もなくなります

分岐② Eggsを削除したい、しかし「Milk」も一緒にリストに載せたい

shopping.txtは、すでにステージ状態になりましたので
まずはステージ状態から離脱、そこからファイル編集して「Milk」を追加します

git reset shoping.txt

上のコマンドでステージ状態から離脱させます
(あるいはgit resetで全離脱させるのも可能です)

git statusで確認してみると、shopping.txtは未ステージの赤色になりました

Diff

git diffは、一般的にはステージされてないファイルだけ効きます
例えば、上の4アイテムshoping.txtから「Eggs」を削除して、git diffで差分をみます

git diff

返り値はこのようです、差分が色ついています

そこから、shopping.txtをステージ状態にし、もう一度git diffを見てみると、返り値は何もないです

git add shopping.txt
git diff // 返り値は皆無

もし、どうしてもステージ後のdiffを見たいなら、以下のコマンドを使います

git diff --staged

patch add mode ファイルの中の一部の変更だけステージに

まずは、quotes.txtのあちこちにテキストを追加

+Do what I do: hold tight and pretend it’s a plan! – The Doctor
 In my experience, there is no such thing as luck. – Obi-Wan Kenobi
+If we’re going to be damned, let’s be damned for what we really are. – Jean-Luc Picard
 The needs of the many outweigh the needs of the few. – Spock
+I swear by my pretty floral bonnet, I will end you. – Malcom Reynolds
 Do, or do not. There is no try. – Yoda

上のように、行1、行3、行5にテキストを追加しました

そして、以下のコマンドでpatch add modeへ

git add -p

ターミナルがこうなりました

紫の部分に色々なOptionsがあります

  • y:「yes」この段落をステージさせる
  • n:「no」この段落をステージさせない
  • q:「quit」この段落と以後の段落をステージさせない
  • a:「any」この段落と以後の段落をステージさせる
  • d:「don't」このファイル内、この段落と以後の段落をステージさせない
  • /:「search」Regexで段落を検索
  • s:「split」段落を割る
  • e:「edit」段落を編集する
  • ?:「help」操作説明をプリントアウト

Discussion