SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
やりなおせる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.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 ファイル名
• インデックスとワークツリーを変更する
ご清聴ありがとうございました

Contenu connexe

Tendances

バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
add20
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
YUKI Kaoru
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
Takashi Uemura
 

Tendances (20)

はじめようGit
はじめようGitはじめようGit
はじめようGit
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料
 
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンドコンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
 
Git flowについてまとめてみた
Git flowについてまとめてみたGit flowについてまとめてみた
Git flowについてまとめてみた
 
Git 入門
Git 入門Git 入門
Git 入門
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 

En vedette

ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
 

En vedette (6)

Git紹介
Git紹介Git紹介
Git紹介
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
Sphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたSphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみた
 
Sphinx で手軽に作るドキュメント
Sphinx で手軽に作るドキュメントSphinx で手軽に作るドキュメント
Sphinx で手軽に作るドキュメント
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 

Similaire à やりなおせる Git 入門

今日から始めるGithub
今日から始めるGithub今日から始めるGithub
今日から始めるGithub
lion-man
 
gitで過去に戻りたい
gitで過去に戻りたいgitで過去に戻りたい
gitで過去に戻りたい
tattyamm
 
20120324 git training
20120324 git training20120324 git training
20120324 git training
Takeshi AKIMA
 

Similaire à やりなおせる Git 入門 (20)

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

Plus de Tomohiko Himura

Plus de Tomohiko Himura (20)

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

やりなおせる Git 入門