gitで特定のコミットまで状態を戻すにはどうすればいいのか
Railsでtwitterのログイン機能を実装して終わったーと思ってgitのコマンドを打っていたら、 気づくとワーキングツリーの状態がログイン機能実装前の状態に戻っていました。 幸いにも、ログイン機能実装のコミットはBitbucketに残っていたので、 このコミットを使ってワーキングツリーの状態をログイン機能が実装されている状態にしようと思いました。
が、
どうすればgitで特定のコミットまで戻れるのか使いかたが分かっていなかったので、 調べついでにgitに関してもまとめてみました。
特定のコミットまで状態を戻すには
私の場合、戻すコミットが明確だったので、
git reset --hard コミットID
で状態を戻します。
では、この<コミットID>はどこで確認できるのでしょうか。
Bitbucketだったら各コミットに対してそれぞれ7桁のIDが一緒に表示されています。
TOPページからなら、 リポジトリを選択>最近の活動のコミットメッセージの左隣に表示されている7桁。
個別のコミットのページからも確認できます。
もしくはコマンドラインでgit log
と打って確認することもできます。
git log
と打って表示される長いIDの頭7桁がBitbucketで確認できるIDです。
ちなみにgit log
はqと打つと抜けることができます。
gitとは
プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクトで採用されている。Linuxカーネルのような巨大プロジェクトにも対応できるように、動作速度に重点が置かれている。gitでは、各ユーザのワーキングディレクトリに、全履歴を含んだリポジトリの完全な複製が作られる。したがって、ネットワークにアクセスできないなどの理由で中心リポジトリにアクセスできない環境でも、履歴の調査や変更の記録といったほとんどの作業を行うことができる。これが「分散型」と呼ばれる理由である。
個人的にRPGゲームのセーブポイントみたいな感覚です。 コミットIDという魔法の呪文を覚えておけば復活できます。
git関連の記事などまとめておきます。
Rails Tutorialを終えてから今までにやったこと
2016年の12月からスタートして2017年の1月になんとか Rails Tutorialを完了しました。 次は自作のWebアプリを作るぞ!となったところでいきなり壁にぶつかりました。 「アプリってどうやって作ればいいんだろう?」
TutorialではTwitterのようなサンプルアプリを完成させることはできましたが、手順がすべて書いてありその通りに進めれば アプリが完成します。 でも、自分でアプリを作るとなるとTutorialでやっているような開発の流れだけではなく設計から運用までも範囲に含めて 考えていく必要があります。 色々調べてブックマークに登録していましたが、その整理とTutorialを終えてから今までやってきたことをまとめてみます。
2016年12月から2017年1月中旬まで
そもそもプログラミングの学習はこの本からスタートしました。
改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)
- 作者: 黒田努,佐藤和人,株式会社オイアクス
- 出版社/メーカー: インプレス
- 発売日: 2015/05/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
その後はRails Tutorialを黙々と進めます。
1月中旬でTutorialは完了しましたが、内容に関しては5割も理解できていない状態でした。 この1番最初の部分のしんどさとして「分からないor知らない単語だらけ」があります。 海外に行って外国語が分からない状態で過ごすのって結構なストレスになりますが、それと似ています。 分からない単語に出会って調べると、さらに別の単語が出てくるのでまた調べるの繰り返しです。 文章を読んでいても分からない単語に出会うと内容が頭に入ってこないので調べるという行為は避けられません。 知らない世界が広がっていき、新しいものに出会うことができるという面白さもありますが。
Tutorialは最後の方に「読み物ガイド」なるものがあります。
読むに値するRails関連の書籍やドキュメントは書店やWebでいくらでも見つけられます。正直、あまりの多さに閉口するほどです。幸い、それらのほとんどが現在でも入手/アクセス可能です。より高度な技術を身に付けるためのお勧めリソースをいくつかリストアップします。
その中で日本語の読み物ガイドとして紹介されているのがRuby on Railsを仕事にしていくための第一歩です。 同じブログの記事でぼくのかんがえたさいきょうのRailsファースト・ガイドもあります。
この2つの記事と新卒ソフトウェアエンジニアのための技術書100冊を読んで「まずは広く浅く分かっていない知識を埋めていくこと」を考えました。
2017年2月
図書館の蔵書検索サイト「カーリル」を使って近くの図書館から何冊か借りて読みました。 一度RubyやRailsを離れて基本的な知識を埋めようとして読んだ本はこちら
Webを支える技術 ハッカーと画家(webで無料で読めます) コーディングを支える技術 * ソフトウェア開発者の人生マニュアル * リーダブルコード プログラムはなぜ動くのか *マスタリングTCP/IP
あとは、RubyやRailsのリファレンス本を手元に置いておきたかったので、以下の3冊を購入しました。
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (22件) を見る
Ruby on Rails 4 アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/11
- メディア: 大型本
- この商品を含むブログ (6件) を見る
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る
特に「「Ruby on Rails4 アプリケーションプログラミング」はTutorialをやる中で分からないままスルーしていた部分の復習用に使いました。この白本を読んでからTutorialの文章・コードを読むと理解がしやすくなると思います。
2017年3月
自分でwebサービスを作るってどこから手をつければいいんだろう、ということで色々調べる中でわかりやすかったのが こちらの記事です。
特に「ワイヤー・URL・DB設計の3点セットが揃ったら開発に入る」「設計のゴールは、この辺にこういうコードを書いたら実現できそうやなというイメージをして、あとはイメージをコードに落とすだけの状態にすること」という部分は念頭に置いて設計開発を 進めていこうと思います。
他にもブックマークしたエントリーをまとめておきます。
新人プログラマ向け・スキル向上のための具体的なアプローチと考え方 初心者エンジニアがより効率的にコードを書くために必要な三つの力 これからプログラミングを学ぼうとする君へ Ruby と Rails を覚えるために約1ヶ月半でやったこと
Rails Tutorial 第8章ログイン、ログアウト 8.1.4 フラッシュメッセージを表示する が NoMethodErrorになる の解決方法
Rails4.2(第3版)を使用
Rails Tutorial 第8章 8.1.4 フラッシュメッセージを表示するのリスト8.6:ログイン失敗時の処理を扱う(誤りあり)は以下のようになっています。
class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) # ユーザーログイン後にユーザー情報のページにリダイレクトする else flash[:danger] = 'Invalid email/password combination' # 本当は正しくない render 'new' end end def destroy end end
こんな感じの画面になるよ、と書いてありますが。。。
ならない。
エラーのメッセージは、
「NoMethodError in SessionsController#create」と出ます。
色々調べた結果2つの[:session]を[:sessions]にすると解決できました。
これがなぜそうなるのかはまだ理解できていませんが。。。
はてなブックマーク年間ランキングを読むならChrome拡張機能 OneTabが便利です。
2016年のはてなブックマーク年間ランキング上位100エントリーが発表されました。
いざランキングを上から順に見ていって、気になった記事をどんどん開いていくとこのような状況になります(汗)
もはやどのタブでどの記事を開いているのかわからない状態。
こんな状態を解消してくれるのがChrome拡張機能の「OneTab」です。
OneTabを使うとボタンひとつ押すだけでタブをまとめてこんな感じにしてくれます。
OneTabとは
ライフハッカーでも紹介されているGoogle Chrome拡張機能です。
開きまくったタブをまとめるChrome拡張機能『OneTab』で調べ物はずっと効率良くなる
ざっくり機能をまとめると、以下の通り。
・OneTabを使うとメモリ使用量の節約になる
・開いているタブをリストにまとめてグループ化してくれる。
・グループ化したリストはロックをかけて保存可能。
・リンク集を作成して共有できる
インストールはこちらです。=> OneTab
railsコマンドうっても動かない。調べてみたらspringが原因でした。
railsで開発をしていたら度々railsコマンドを入力する場面が出てくる。 エラーに慣れていない初心者の私にとっては、tutorialの通りにコマンドを入力してリザルトがtutorial通りになればほっと一安心。エラーが出ればその都度ため息がでるような心持ちなのですが、そのひとつは今回の「railsコマンド動かない」でした。
「なるほど、こうやって一つ一つエラーの対処法を調べることも成長の道のりのひとつなのだな。」と思いなおして重い腰をあげながらGoogle先生にお伺いをたてるのでした。
railsコマンドが使えない
そう、railsコマンドとはこれです。
rails new
rails generate
そもそもこれらのコマンドが使えないとお話しにならないわけですが、ターミナルに打ち込むと現時点の私には何が起きているのかわからない文字列たちが一斉に表示されてあせりました。
springなるものが原因らしい
「rails コマンド エラー」で調べてみると同じような状況に陥っている方がいました。 それによるとrailsコマンドが動かなかったらまずspring止めてみろ、とのこと。
言われた通りspringを停止。
$ spring stop Spring stopped.
すると無事動きました。
よかった。本当に。
springってrailsコマンドやrakeコマンドの起動を早くするために導入されているようですが、これが動かない原因だったとは。
いくつか参考にさせてもらった記事リンク貼っておきます。
railsコマンドが固まったんでspringをstopしたら動くようになった
railsコマンドでエラー cannot load such file -- bundler/setup (LoadError)
Markdown記法がすごく便利でびっくりしました。
今日はMarkdown記法というものを知りました。 少し前に言葉だけは聞いたことがあったのですが、改めてどんなものなのか調べて、自分でも少しいじってみて「こりゃ便利!」と思ったのでメモ。
そもそもプログラミングの勉強をより円滑に進めるためにMacアプリの Kobitoを使い始めたのがきっかけでした。
Markdown(マークダウン)は、文書を記述するための軽量マークアップ言語のひとつである。本来はプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発されたものである。しかし、現在ではHTMLのほかパワーポイント形式やLATEX形式のファイルへ変換するソフトウェア(コンバータ)も開発されている。
とのこと。
はてなブログやQiitaでもこういったコードの挿入を見かけたことありませんか? これどうやってやっているのか分からなかったのですが、Markdown記法では、`で囲むだけ。
`puts 'The best app to log and share programming knowledge.'
冬のピザまんはなぜ美味しいのか?
このような見出しも文章の頭に##をつけるだけ。 # の数で見出しの大きさが変わります。
ピザマン
ピザマン
ピザマン
ピザマン
ピザマン
ピザマン
引用は文章の頭に>をつけるだけ。
ピザまんは冬の救世主です。ピザを肉まんの皮とコラボさせることによって生み出される相乗効果は必ずやあなたの冷え切った心と体を温めてくれること間違いなしです。
HTMLよりもサクサク書きやすい。
今後お世話になりそう。
Cloud9 IDEでrails serverの起動方法
cloud9でRuby on Rails Tutorialを進めていますが、サーバーを立ち上げる時のコマンドはローカル開発をする時と異なります。
cloud9のターミナル上で(Tutorialにある通り作業を進めているターミナルと別のターミナルを使った方がよいです。新しいターミナルはターミナルの所の+を押してNew Terminalを選択すると新規作成できます。)
rails s -b $IP -p $PORT
上のコマンドを実行すると,
[2016-12-29 04:44:53] INFO WEBrick 1.3.1
[2016-12-29 04:44:53] INFO ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-12-29 04:44:53] INFO WEBrick::HTTPServer#start: pid=2616 port=8080
実行が成功すると、こんな感じになります。