やりなおせる git 入門

Post on 22-May-2015

26.750 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

広島Git 勉強会 201306 の資料。 補足はこちらに http://blog.eiel.info/blog/2013/06/02/hiroshima-git/ 元に戻すを主眼に、危険と少し危険にコマンドを分類してみた。 危険 - 変更が消えてしまい復元できない 少し危険 - コミットへの参照がない状態になる

TRANSCRIPT

やりなおせるGit入門2013-06-01 広島 Git 勉強会 201306

自己紹介

•ひむらともひこ• Twitter eielh• Github eiel• http://eiel.info/

目的

•元に戻せないのは怖い•元に戻せるようになろう•危険 と 少し危険 を知る

とみせかけてreset と checkout

の話をする

ふつうの Git 入門+ やりなおせる

事前準備

•$ echo readme > README.md

•$ ls .README.md

•$ cat README.mdreadme

はじめてのコミット

•git init

•git add .

•git commit -m ‘initial commit’

間違えたらどーするの?

git init

•間違えた!•最初からやりなおしたい•rm -rf .git

git add .

•間違えた!• add する前にもどしたい•git rm --cached .

ん?覚えられないって?

• git status すると書いてあります

git status$ git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: README.md#

git commit -m ‘intial commit`

•間違えた!•コミットメッセージなおしたい• git commit --amend -m ‘replace message’

初回は特別なので難しい

•最初からやりなおしたくなれば•rm -rf .git

NeXT STEPふたつめのコミット

ふたつめのコミット

•$ echo readyou > README.md

•$ git add -u

•$ git commit -m ‘second commit’

ファイルの変更

•間違えた!•変更をなしにしたい•git checkout README.md

•変更は消えてしまう•危険

git add -u

•間違えた!•変更をまだ追加したくないの•git reset README.md

•変更は 残ったまま•安全

git commit

• 間違えた!! • commit する前と同じ状態にしたい• git reset --soft HEAD^

• 変更は残ったまま & コミットは追えなくなる• 少し危険

登場したコマンド

• git rm --cached

• git checkout ファイル名

• git reset

• git reset --soft コミットのようなもの

危険の定義

• 変更が失われてしまい、復元できなくなってしまうようなもの

危険なコマンド

• git reset --hard• git checkout ファイル名•ブランチ名の場合は安全•変更した残したいならコミットする

少し危険の定義

•コミットが新しく作成され、別物に代わってしまう

•コミットが今のブランチから辿れない

少し危険なコマンド

• git commit --amend•ひとつ前のコミットが別のものになります

• git rebase•新しいコミットに置き換えられます

危険なコマンドをする前に

•怖いなら•とにかくコミットしとけ• git commit

少し危険なコマンドをする前に

•怖いなら•とにかくブランチを作成しとけ• git branch ブランチ名

よくわからない、怖くなったら

• git branch helpme• git add .• git commit -m ‘たすけて’•偉い人に聞く

もう少し詳しく

reset と checkout

•必要な知識•ワークツリー•インデックス•コミット•ツリーのようなもの

ワークツリー

•実際に存在しているファイルやディレクトリ

•編集して変化していく内容

コミットコミット

インデックスインデックス

ワークツリーワークツリー

コミットコミット

インデックスインデックス

ワークツリーワークツリー

ファイルを変更する

インデックス

•コミットを作る前準備をするところ•準備ができたところでコミットするとそれがコミットになる

コミットコミット

インデックスインデックス

ワークツリーワークツリー

git add

コミット

•復元するために必要なファイルやディレクトリ、コミットメッセージ、作成日、前のコミットなどを保存している

コミットコミット

インデックスインデックス

ワークツリーワークツリー

git commit

ツリーのようなもの

•ファイルツリーがとりだせるようなもの•コミット•ツリー•インデックス•などなど

Reset

•指しているコミットとインデックスを指定したコミットのものに変えるコマンド

• --soft の場合は指しているコミットだけ• --hard の場合はワークツリーも変更•コミットを指定しない場合は HEAD

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git reset --soft HEAD^

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git reset HEAD^

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git reset --hard HEAD^

reset の弱い順

• git reset --soft• git reset• git resset --hard

強い

弱い

インデックスだけ取り消したい

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD

git reset HEAD

インデックスもワークツリーもまとめて戻したい

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD

git reset --hard HEAD

上から切り裂く

Checkout ファイル

• `checkout ブランチ` とは区別して考えて• ワークツリーとインデックスを変更する• 指定したファイルをインデックスと同じものに• `ツリーのようなもの`明示的にを指定することもできます

コミットコミット

インデックスインデックス

ワークツリーワークツリー

git checkout ファイル名

コミットコミット

インデックスインデックス

ワークツリーワークツリー

HEAD^

git checkout HEAD^ ファイル

下ふたつだけを自由自在に動かす

一番下を動かすのは危険

少し危険

git commit --amend

A B Cmaster

git commit --amend

A B C

C'master

C を辿る手段がないreflog などで探せますが

master を複製しておくgit branch old

git commit --amendold

A B C

C'master

git reset --hard oldで元に戻れる

git rebase

初期状態origin

A B C

Dmaster

git rebase originorigin

A B C

D

D'

master

master を複製しておくとgit branch old

初期状態

old

origin

A B C

Dmaster

git rebase origin

old

origin

A B C

D

D'

master

git reset --hard oldで元に戻れる

別にコミットのID がわかるなら ブランチは

作る必要はありません

おまけ

• git revert はあるコミットをなかったことにするコミットを作成します

•新しくコミットを作成するコマンド• git commit の -m はそろそろ卒業しましょう

まとめ

• 危険なことをするなら• 変更がコミットされてるか確認する• 消えてもいいなら気にしない• 少し危険なことをするなら• ブランチを作成しとけば元に戻せる

まとめ

•危険•git reset --hard•git checkout ファイル名

まとめ

•少し危険• git reset コミットのようなもの• git commit --amend• git rebase

まとめ

• git reset は ブランチ が指すところを変える• git checkout ファイル名• インデックスとワークツリーを変更する

ご清聴ありがとうございました

top related