git push --force-with-lease で間違った(必要のない)コミットをなかったことに
git操作中、例えば入れたくないファイルをgit addしてcommitしてpushしてしまった。
※コミット前に、diff --stagedで確認するのはもちろんですが。
そういうときに、git push --force-with-leaseを使用して、コミット自体をなかったことにしようという話です。
Git上で、そのファイルを無かったことにするには、
①gitignoreに追記して、再度プッシュする
②git push --force-with-leaseでコミットを無かったことにする。(履歴からも消せる)
ただFBCにて、
> 戻すコミットを積むより、その対応をしたコミットを消した方がいいです。
とのことだったので、ちょうどいい機会なので挑戦しました。
確認
git rebase -i HEAD~5
これを打つと、最新のコミット5件(数字が最新のコミットn件を表す)が編集出来るようになります。
※ここで注意点なのですが、編集する必要のないものを含まないように、数字は調整されてください。
例えば、削除しないものでも、このあとの編集作業を行うと、自分も共同編集者としてコミット履歴にのこり、それはそれで面倒くさくなってしまいます。
fjord-books_app % git rebase -i HEAD~5
hint: Waiting for your editor to close the file...
pick f35a5a0 git fetchは不要なのでREADMEから削除
pick f09865d Update README
pick 07e7de3 Implement kaminari
pick 06dfe90 Implement page method
pick f712266 Japaneseize kaminari
今回は、これを消したいのです。
★pick f712266 Japaneseize kaminari
vimでの操作
i を打つと文字が打てるようになります。
pick f35a5a0 git fetchは不要なのでREADMEから削除
pick f09865d Update README
pick 07e7de3 Implement kaminari
pick 06dfe90 Implement page method
drop f712266 Japaneseize kaminari
編集
drop f712266 Japaneseize kaminari
これが削除を意味します。
esc : wq
を打ちます。
これで不要なコミットが消えました。
Successfully rebased and updated refs/heads/my-pagination.
変更分をpushする。
fjord-books_app % git poh --force-with-lease
Enumerating objects: 31, done.
Counting objects: 100% (31/31), done.
Delta compression using up to 4 threads
Compressing objects: 100% (18/18), done.
Writing objects: 100% (21/21), 2.17 KiB | 370.00 KiB/s, done.
Total 21 (delta 14), reused 4 (delta 3)
remote: Resolving deltas: 100% (14/14), completed with 8 local objects.
To https://github.com/shugoStr/fjord-books_app.git
+ f712266...c5c4a69 HEAD -> my-pagination (forced update)
結果
git push --force-with-lease とはなんなのか?
PUSHの際、ローカルrefとリモートrefを比較しローカルが最新か判定し、最新でなければPUSHが失敗するというもの。
※ただし、直前にfetchしているとPUSHが成功してしまうので注意
他人の変更を上書きするおそれのある git push --force でなく、最後に fetch したタイミング以降に他人が push していたら失敗する git push --force-with-lease を使う方が良い。
参考記事
ruby version 変更
ゴール
インストールされていない、Rubyの3.0.1をインストールする。
# インストールされているバージョン確認 FJORD % rbenv versions system 2.5.8 2.6.5 2.7.2 * 3.0.2 (set by /Users/myMBP/.rbenv/version) # バージョン指定にて、インストール FJORD % rbenv install 3.0.1 Downloading openssl-1.1.1l.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1 Installing openssl-1.1.1l... Installed openssl-1.1.1l to /Users/myMBP/.rbenv/versions/3.0.1 Downloading ruby-3.0.1.tar.gz... -> https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.1.tar.gz Installing ruby-3.0.1... ruby-build: using readline from homebrew Installed ruby-3.0.1 to /Users/myMBP/.rbenv/versions/3.0.1 # インストール確認 FJORD % rbenv versions system 2.5.8 2.6.5 2.7.2 3.0.1 * 3.0.2 (set by /Users/myMBP/.rbenv/version) # グローバルでRubyのバージョン変更(PJ単位でなく、PC単位での一括変更) FJORD % rbenv global 3.0.1 # 変更されているかを確認 FJORD % rbenv versions system 2.5.8 2.6.5 2.7.2 * 3.0.1 (set by /Users/myMBP/.rbenv/version) 3.0.2 Ruby FJORD % ruby -v ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin21]
以上です。
rails server でちゃんと終了できていなかった時のこと。
エラー:
NameError in BooksController#show uninitialized constant Book::PictureUploader Extracted source (around line #2): 1 2 3 class Book < ApplicationRecord mount_uploader :picture, PictureUploader end Rails.root: /Users/myMBP/work/sandbox/my_web_apps/books_app Application Trace | Framework Trace | Full Trace app/models/book.rb:2:in `<class:Book>' app/models/book.rb:1:in `<main>' app/controllers/books_controller.rb:62:in `set_book' Request Parameters:
uninitialized constant とは
エラー内容:
qiita.com
> Book::PictureUploader
を定義していない旨のエラーが出ていました。
ただし、本を写経していたので、タイポでも無い限り間違いであるはずがないと確信していたので、どうしたものかと悩んでいました。
※本自体は、他の受講生が多数クリアしていたので。
エラー名で検索してみる
下記の様に命名規則違反でも、当エラーが発生するようです。
【Rails】uninitialized constant UsersController というエラーが出たときの対処法 | FREE SWORDER
またジャストのエラー文言かぶりでしたが、こちらでも解消せず。
Railsチュートリアル中にNameError: uninitialized constant Micropost::PictureUploaderが出た時の対処法 - Qiita
spring stop
spring ってなんなんだ
> Spring は Rails アプリケーションの preloader(プリローダー)の gem です。Rails アプリケーションをバックグラウンドで走らせたままにしておくことにより(pre + load = 前もってロードしておく)、bin/rails や bin/rake コマンドの2回目以降の起動時間が短縮されます。
原因
そもそもサーバー起動時に、下記画像の文言が出ており、
サーバーの停止がうまくいっていなかった模様。
そこでサーバー停止について、調べる。
> cat tmp/pids/server.pid
そして、killしてから立ち上げてみる。
成功!
じゃあ、なんでサーバー起動が正常でない時のエラーがモデルについてのエラーなのか
uninitialized constant とは何なのかに立ち返る。
> クラスの読み込みが上手くいっていない。
rubyファイルを実行した時にrails sした直後は実行時点でクラスを読み込んでいないので、app/models/user.rbファイルを探しにいく。
app/models/user.rbというファイルがあれば、ファイルをオープンしてクラスを読み込む
しかし、app/models/user.rbというファイルがない、ファイルの中にUserというクラスが定義されていない場合、uninitializedエラーが起きる
ここでいう、user.rbが、book.rbである。
Railsには、標準でPumaというWebサーバが付随しています。
サーバーからアクセスするも→book.rbが読み込めない→ファイルの定義間違えてない?というエラーになる。
参考記事:
サーバー立ち上げの時の文言をしっかり見ていたら、
ここにたどり着けたはず。いつも勉強になります。
しっかりエラーハンドリングまで載っているサイト。
大変参考になります。
git checkout -b のあとにやること
ブランチ作成あとにやること、ToDo
まずは、ローカルに作成と移動。
git checkout -b develop_memo-app Switched to a new branch 'develop_memo-app'
確認する。
sinatra % git b -a Develop * develop_memo-app ★登録したい develop_tmp main remotes/origin/Develop remotes/origin/develop_tmp remotes/origin/main
リモートへの登録
git poh
【github】ローカルでブランチ作成して、リモートにプッシュして反映させるまで
実行コマンド
新規ブランチ作成&移動
1. git co -b
ローカル確認
2. git b -a
リモートへプッシュ
3. git poh
- >git push origin HEAD
リモート確認
4. git b -a
実際の流れ
sinatra % git b -a
Develop_1
develop
develop_db
develop_tmp
main
remotes/origin/Develop_1
remotes/origin/develop
remotes/origin/develop_db
remotes/origin/develop_tmp
remotes/origin/main
sinatra %
sinatra %
sinatra % git co -b develop_memo
Switched to a new branch 'develop_memo'
sinatra % git b -a
Develop_1
develop
develop_db
develop_memo
develop_tmp
main
remotes/origin/Develop_1
remotes/origin/develop
remotes/origin/develop_db
remotes/origin/develop_tmp
remotes/origin/main
sinatra % git push origin HEAD
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'develop_memo' on GitHub by visiting:
remote: https://github.com/shugoStr/memo-app/pull/new/develop_memo
remote:
To github.com:shugoStr/memo-app.git
* [new branch] HEAD -> develop_memo
【github】Githubのウェブ上で切り出したブランチをリモート・ローカルに反映させる
※git bは、git branchのことです。
状況
Github.comのウェブ上で新規ブランチを作成したとする。
develop_tmp ★これが今回反映したいブランチ
ウェブ上で作成しただけでは、リモートブランチへの反映はない。
(追跡ブランチ)
リモートブランチに反映させる
git fetch
で反映させる。
sinatra % git fetch From github.com:shugoStr/memo-app * [new branch] develop_tmp -> origin/develop_tmp
確認する。
sinatra % git b -a * Develop_1 Develop_1_tmp Develop_main develop_db main remotes/origin/Develop remotes/origin/Develop_1 remotes/origin/develop_db remotes/origin/develop_tmp ★ここ remotes/origin/main
ローカルに反映させる。
git checkout hoge
sinatra % git checkout develop_tmp Branch 'develop_tmp' set up to track remote branch 'develop_tmp' from 'origin'. Switched to a new branch 'develop_tmp' sinatra % git b -a Develop_1 Develop_1_tmp Develop_main develop_db * develop_tmp ★ここ main remotes/origin/Develop remotes/origin/Develop_1 remotes/origin/develop_db remotes/origin/develop_tmp remotes/origin/main
webだと作成自体は便利ですが、
反映などで結局必要なのでどちらがいいのでしょうか。
ブランチの切り出しの間違いは、前者のwebからがミスが少なそうです。
createdb のエラー対応
実行コマンド:
createdb hoge
エラー内容:
error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory Is the server running locally and accepting connections on that socket?
解決策:
sinatra % brew services start postgresql ==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql) sinatra % brew services stop postgresql Stopping `postgresql`... (might take a while) ==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql) sinatra % brew services restart postgresql ==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
理由:
> createdb: could not connect to database template1: could not connect to server:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
> これは、サーバが起動していないか、createdbが想定している状態でサーバが起動していないかを示しています。 こちらも、インストール手順を点検するか管理者に相談し
=>サーバーをスタートさせる。または、リロードして設定の反映を完了させる。
参考: