Gitの使い方
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を一つ作り、以下のように記入
<p>Hello, world!</p>
以下のコマンドを打ちます
git add .
git commit
そして、こういう画面が出てきます
これがVimというテキストエディタです
簡単にVimの指令をまとめてみると
-
i
:編集モード (insert) -
esc
: 編集モードを退出 -
:wp
:保存して終了 (write and quit)
上の画面に対して、以下のように操作してください
-
i
を打つ - 「This is my initial commit」という内容の英語を打つ
-
esc
を打つ -
:wq
を打ってからEnter
git add以後のファイル変更
まずはindex.htmlを以下のように変更して保存
<p>Hello, world?</p>
そして、以下のコマンドを打つ
git add .
続いて、さらに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 "コミットしました"
コミットは、二つの修正内容を合併し
以下のようになります
- <p>Hello, world!</p>
+ <p>Goodbye, cruel world!</p>
でも、上のやり方は二つのコマンドも使いましたから(git add
とgit commit
)
今回は一つのコマンドだけで同じ効果を出せる方法を紹介します
git commit -am "コミットしました"
BranchとMerge 他人との共同作業
Branch作成
上の例を沿えて続いて紹介します
まずはもう一つのファイル: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を編集します
+<h1>CREDIT</h1>
<p>This is credit</p>
続いて内容をコミット
git commit -am "タイトルを追加します"
(git commit -am
はgit 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