gitで特定のコミットまで状態を戻すにはどうすればいいのか

Railstwitterのログイン機能を実装して終わったーと思ってgitのコマンドを打っていたら、 気づくとワーキングツリーの状態がログイン機能実装前の状態に戻っていました。 幸いにも、ログイン機能実装のコミットはBitbucketに残っていたので、 このコミットを使ってワーキングツリーの状態をログイン機能が実装されている状態にしようと思いました。

が、

どうすればgitで特定のコミットまで戻れるのか使いかたが分かっていなかったので、 調べついでにgitに関してもまとめてみました。

特定のコミットまで状態を戻すには

私の場合、戻すコミットが明確だったので、 git reset --hard コミットIDで状態を戻します。 では、この<コミットID>はどこで確認できるのでしょうか。 Bitbucketだったら各コミットに対してそれぞれ7桁のIDが一緒に表示されています。

TOPページからなら、 リポジトリを選択>最近の活動のコミットメッセージの左隣に表示されている7桁。 f:id:eclipse0041taka:20170314124059p:plain

個別のコミットのページからも確認できます。 f:id:eclipse0041taka:20170314124052p:plain

もしくはコマンドラインgit logと打って確認することもできます。 f:id:eclipse0041taka:20170314124629p:plain

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)

改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)

その後はRails Tutorialを黙々と進めます。

1月中旬でTutorialは完了しましたが、内容に関しては5割も理解できていない状態でした。 この1番最初の部分のしんどさとして「分からないor知らない単語だらけ」があります。 海外に行って外国語が分からない状態で過ごすのって結構なストレスになりますが、それと似ています。 分からない単語に出会って調べると、さらに別の単語が出てくるのでまた調べるの繰り返しです。 文章を読んでいても分からない単語に出会うと内容が頭に入ってこないので調べるという行為は避けられません。 知らない世界が広がっていき、新しいものに出会うことができるという面白さもありますが。

Tutorialは最後の方に「読み物ガイド」なるものがあります。

読むに値するRails関連の書籍やドキュメントは書店やWebでいくらでも見つけられます。正直、あまりの多さに閉口するほどです。幸い、それらのほとんどが現在でも入手/アクセス可能です。より高度な技術を身に付けるためのお勧めリソースをいくつかリストアップします。

その中で日本語の読み物ガイドとして紹介されているのがRuby on Railsを仕事にしていくための第一歩です。 同じブログの記事でぼくのかんがえたさいきょうのRailsファースト・ガイドもあります。

この2つの記事と新卒ソフトウェアエンジニアのための技術書100冊を読んで「まずは広く浅く分かっていない知識を埋めていくこと」を考えました。

2017年2月

図書館の蔵書検索サイト「カーリル」を使って近くの図書館から何冊か借りて読みました。 一度RubyRailsを離れて基本的な知識を埋めようとして読んだ本はこちら

Webを支える技術 ハッカーと画家(webで無料で読めます) コーディングを支える技術 * ソフトウェア開発者の人生マニュアル * リーダブルコード プログラムはなぜ動くのか *マスタリングTCP/IP

あとは、RubyRailsのリファレンス本を手元に置いておきたかったので、以下の3冊を購入しました。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

特に「「Ruby on Rails4 アプリケーションプログラミング」はTutorialをやる中で分からないままスルーしていた部分の復習用に使いました。この白本を読んでからTutorialの文章・コードを読むと理解がしやすくなると思います。

2017年3月

自分でwebサービスを作るってどこから手をつければいいんだろう、ということで色々調べる中でわかりやすかったのが こちらの記事です。

初めての個人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

こんな感じの画面になるよ、と書いてありますが。。。

f:id:eclipse0041taka:20170106180308p:plain

ならない。

エラーのメッセージは、

「NoMethodError in SessionsController#create」と出ます。

色々調べた結果2つの[:session]を[:sessions]にすると解決できました。

これがなぜそうなるのかはまだ理解できていませんが。。。

はてなブックマーク年間ランキングを読むならChrome拡張機能 OneTabが便利です。

2016年のはてなブックマーク年間ランキング上位100エントリーが発表されました。

いざランキングを上から順に見ていって、気になった記事をどんどん開いていくとこのような状況になります(汗)

f:id:eclipse0041taka:20161231080018p:plain

もはやどのタブでどの記事を開いているのかわからない状態。

こんな状態を解消してくれるのがChrome拡張機能の「OneTab」です。

OneTabを使うとボタンひとつ押すだけでタブをまとめてこんな感じにしてくれます。

f:id:eclipse0041taka:20161231075056p:plain

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コマンドの起動を早くするために導入されているようですが、これが動かない原因だったとは。

いくつか参考にさせてもらった記事リンク貼っておきます。

Rails4.1 から入ったSpringって何よ?

Rail4で困ったらSpringを停止せよ

railsコマンドが固まったんでspringをstopしたら動くようになった

railsコマンドでエラー cannot load such file -- bundler/setup (LoadError)

Markdown記法がすごく便利でびっくりしました。

今日はMarkdown記法というものを知りました。 少し前に言葉だけは聞いたことがあったのですが、改めてどんなものなのか調べて、自分でも少しいじってみて「こりゃ便利!」と思ったのでメモ。

そもそもプログラミングの勉強をより円滑に進めるためにMacアプリの Kobitoを使い始めたのがきっかけでした。

wikipediaによると、Markdown記法とは、

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

 

実行が成功すると、こんな感じになります。