SlideShare a Scribd company logo
やりなおせるGit入門
2013-06-01 広島 Git 勉強会 201306
自己紹介
•ひむらともひこ
•Twitter eielh
•Github eiel
•http://eiel.info/
やりなおせる Git 入門
目的
•元に戻せないのは怖い
•元に戻せるようになろう
•危険 と 少し危険 を知る
とみせかけて
reset と checkout
の話をする
やりなおせる Git 入門
ふつうの Git 入門
+ やりなおせる
事前準備
•$ echo readme > README.md
•$ ls .
README.md
•$ cat README.md
readme
はじめてのコミット
•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 C
master
git commit --amend
A B C
C'
master
C を辿る手段がない
reflog などで探せますが
master を複製しておく
git branch old
git commit --amend
old
A B C
C'
master
git reset --hard old
で元に戻れる
git rebase
初期状態
origin
A B C
D
master
git rebase origin
origin
A B C
D
D'
master
master を複製しておくと
git branch old
初期状態
old
origin
A B C
D
master
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 ファイル名
• インデックスとワークツリーを変更する
ご清聴ありがとうございました

More Related Content

PDF
はじめてのGit forデザイナー&コーダー
PDF
いつやるの?Git入門 v1.1.0
PDF
デザイナのためのGit入門
PDF
いつやるの?Git入門
PDF
はじめようGit
PDF
ノンプログラマでも今日から使える「Git」でバージョン管理
PDF
Gitはじめの一歩
PDF
コンセプトから理解するGitコマンド
はじめてのGit forデザイナー&コーダー
いつやるの?Git入門 v1.1.0
デザイナのためのGit入門
いつやるの?Git入門
はじめようGit
ノンプログラマでも今日から使える「Git」でバージョン管理
Gitはじめの一歩
コンセプトから理解するGitコマンド

What's hot (20)

PDF
15分でわかるGit入門
PDF
こわくない Git
PDF
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
PDF
View Customize Pluginで出来ること
PDF
Redmine にいろいろ埋め込んでみた
PPTX
Dockerからcontainerdへの移行
PDF
Git_GitHub 入門者向けスライド.pdf
PDF
社内Git勉強会向け資料
PPTX
async/await のしくみ
PDF
DockerとPodmanの比較
PDF
Gitのよく使うコマンド
PDF
Dockerからcontainerdへの移行
PDF
Redmineプラグイン導入・開発入門
PDF
View customize pluginを使いこなす
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
RedmineのFAQとアンチパターン集
PDF
Test Yourself - テストを書くと何がどう変わるか
PDF
うちのRedmineの使い方(2)
PPTX
世界一わかりやすいClean Architecture
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
15分でわかるGit入門
こわくない Git
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
View Customize Pluginで出来ること
Redmine にいろいろ埋め込んでみた
Dockerからcontainerdへの移行
Git_GitHub 入門者向けスライド.pdf
社内Git勉強会向け資料
async/await のしくみ
DockerとPodmanの比較
Gitのよく使うコマンド
Dockerからcontainerdへの移行
Redmineプラグイン導入・開発入門
View customize pluginを使いこなす
コンテナの作り方「Dockerは裏方で何をしているのか?」
RedmineのFAQとアンチパターン集
Test Yourself - テストを書くと何がどう変わるか
うちのRedmineの使い方(2)
世界一わかりやすいClean Architecture
SPAセキュリティ入門~PHP Conference Japan 2021
Ad

Viewers also liked (8)

PDF
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
PPT
Git紹介
PDF
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
KEY
一人でもはじめるGitでバージョン管理
PDF
Sphinxで社内勉強会(Git)の
資料を作ってみた
PPTX
Sphinx で手軽に作るドキュメント
PDF
ドキュメントシステムはこれを使え2015年版
PDF
ドキュメントを作りたくなってしまう魔法のツールSphinx
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
Git紹介
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
一人でもはじめるGitでバージョン管理
Sphinxで社内勉強会(Git)の
資料を作ってみた
Sphinx で手軽に作るドキュメント
ドキュメントシステムはこれを使え2015年版
ドキュメントを作りたくなってしまう魔法のツールSphinx
Ad

Similar to やりなおせる Git 入門 (20)

PPTX
Git超入門
PDF
Python for Data Analysis第1回勉強会(+git入門)
ODP
底辺webプログラマが今更git語ってみた
PDF
今日から始めるGithub
PDF
Gitの使い方あれこれ
PDF
初心者がGoでCLIツール作ってみて学んだこと
PDF
Source treeの紹介
KEY
GitListの使い方
PPTX
Github第4章
PDF
Git勉強会 2016 Gitで卒論を管理しよう回
PDF
Gitpractice3
PDF
git-webtouchmeeting
PDF
gitを使って、レポジトリの一部抽出forkしてみました
PPTX
2018 07-18 git-hub講座
PPT
Gitの紹介
PDF
はじめてのGit
PDF
Gitとちょっと仲良くなるために覚えたことまとめ
PDF
gitで過去に戻りたい
PDF
Gitのつくりかた YAPC::Asia 2015 @DQNEO
KEY
20120324 git training
Git超入門
Python for Data Analysis第1回勉強会(+git入門)
底辺webプログラマが今更git語ってみた
今日から始めるGithub
Gitの使い方あれこれ
初心者がGoでCLIツール作ってみて学んだこと
Source treeの紹介
GitListの使い方
Github第4章
Git勉強会 2016 Gitで卒論を管理しよう回
Gitpractice3
git-webtouchmeeting
gitを使って、レポジトリの一部抽出forkしてみました
2018 07-18 git-hub講座
Gitの紹介
はじめてのGit
Gitとちょっと仲良くなるために覚えたことまとめ
gitで過去に戻りたい
Gitのつくりかた YAPC::Asia 2015 @DQNEO
20120324 git training

More from Tomohiko Himura (20)

PDF
つながりをゆるふわにしよう Active supprt notifications
PDF
Hiroshimarbについて
PDF
コンピュータをもっと使おう
PDF
OSC2013 HIROSHIMA ライトニングトーク すごい広島
PDF
広島で Ruby が流行らないのはどう考えても俺たちが悪い
PDF
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
PDF
Rails の自動読み込みを支える技術
PDF
Rails プロジェクトでスタートダッシュを決める
PDF
すごい cron ? - Jenkins 試した
PDF
すごい広島
PDF
すごい Hiroshima で楽しく学ぼう
PDF
黒い画面入門 + パッケージ管理紹介 + Macの使い方とか
PDF
Mac OS X のパッケージ管理紹介/比較
PDF
軽量マークアップ言語で気楽にマークアップ
PDF
Hakyllで遊んでみた。
PDF
Liquid の紹介
PDF
Git 仕組み 入門
PDF
Rails Guide 翻訳しようぜ。
PDF
Hiroshimarb 027-fiber
PDF
Hiroshimarb 027-fiber
つながりをゆるふわにしよう Active supprt notifications
Hiroshimarbについて
コンピュータをもっと使おう
OSC2013 HIROSHIMA ライトニングトーク すごい広島
広島で Ruby が流行らないのはどう考えても俺たちが悪い
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
Rails の自動読み込みを支える技術
Rails プロジェクトでスタートダッシュを決める
すごい cron ? - Jenkins 試した
すごい広島
すごい Hiroshima で楽しく学ぼう
黒い画面入門 + パッケージ管理紹介 + Macの使い方とか
Mac OS X のパッケージ管理紹介/比較
軽量マークアップ言語で気楽にマークアップ
Hakyllで遊んでみた。
Liquid の紹介
Git 仕組み 入門
Rails Guide 翻訳しようぜ。
Hiroshimarb 027-fiber
Hiroshimarb 027-fiber

やりなおせる Git 入門