Daiブログ

普段学習したことや生活のことについて書いていきます〜

git rebase でコンフリクトした時の対処

開発ブランチdevelopで作業をしている際にメインブランチmainの内容を取り込む場面があります。 自分はその際にgit pull --rebase origin mainとして取り込んでいるのですがこの時にコンフリクトを起こすことがよくあったのでメモとして。

  • developブランチでgit pull --rebase origin mainを実行
  • コンフリクトがあった場合ファイルを適宜修正
  • git add .を実行
  • git rebase --continueでリベースを続ける
  • コンフリクトがあった場合ファイルを適宜修正

といった以上の流れをコンフリクトがなくなるまで繰り返す。 もし仮に途中でリベースを辞めたいと思った時はgit rebase --abortを実行するとgit rebaseを実行する前に戻ります。

rbenvを使ったRubyのバージョン管理

rbenvを使ったRubyのバージョン管理についてまとめてみます。

rbenvをインストール

rbenvは複数のRubyのバージョンを管理し、必要に応じてバージョンを指定して使うことが出来るツールです。 今回はhomebrewを使ってインストールします。

$ brew install rbenv

インストールできていることを確認するために、rbenvのバージョンを確認します。

$ rbenv -v
rbenv 1.1.2
$ rbenv --version
rbenv 1.1.2

-v,--versionどちらでも大丈夫です。 rbenv ○.○.○となれば正しくインストールされています。

Rubyをインストールする

以下のコマンドでインストール可能なRubyのバージョンが表示されます。

$ rbenv install --list
$ rbenv install -l

上記のコマンド(どちらでも可)実行するとRubyのバージョンが表示されます。 今回は最新版のRuby3.0.0をインストールします。

$ rbenv install 3.0.0

インストールができたらインストールされたRubyのバージョンを確認します。

$ rbenv versions
  system
* 2.7.1 (set by /Users/username/.rbenv/version)
  3.0.0

*印がついているのが現在適用されているRubyのバージョンです。

Rubyのバージョンを切り替える

以下のコマンドでローカルな切り替えが可能です。 ローカルな切り替えとはディレクトリごとにバージョンを切り替えることです。

$ rbenv local バージョン指定

グローバルな切り替えはシステム全体で使用するRubyのバージョンを切り替えることです。

$ rbenv global バージョン指定

以上rbenvを使ったRubyのバージョン管理でした。

プッシュしてしまったコミットメッセージを変更する

gitを使っていく中でコミットメッセージの変更をすることがあったのでやり方をこちらにメモしておこうと思いました。 これから行うのはすでにリモートにプッシュしてしまったコミットのメッセージの変更です!

  • git rebase -i HEAD~n  上記のコマンドを実行することでHEADからn個までのコミットを表示できる
$git rebase -i HEAD~4
pick 3ba3a2e commit comment 1
pick 6ef356e commit comment 2
pick d84a911 commit comment 3
pick 9a34966 commit comment 5

今回はcomment 5comment 4に変更します。 コミットメッセージを編集する場合pickeditに変えてあげます。

pick 3ba3a2e commit comment 1
pick 6ef356e commit comment 2
pick d84a911 commit comment 3
edit 9a34966 commit comment 5

編集が終わったら:wqで保存終了します。 そうすると以下のような表示が出ると思います。

$ git rebase -i HEAD~4
Stopped at 9a34966...  comment 5
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue
  • コミットメッセージの編集 以下のコマンドでメッセージの編集を行っていきます。
$git commit --amend

コマンドを実行すると以下のような表示が出ると思います。

comment 5

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#以下省略

メッセージを編集します。今回はcomment 4に変更。

comment 4

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#以下省略

編集が終わったら:wq で保存終了。 以下のような画面が出ればokです!

$ git commit --amend
[detached HEAD ] comment 4追加
 Date: Wen Dce 20 19:11:02 2020 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 comment 4

以下のコマンドでrebaseを実行し終了。

$git rebase --continue
  • リモートリポジトリにプッシュする 変更した結果をリモートへプッシュします。 プッシュする場合はgit push -fではなくgit push --force-with-leaseを使いましょう! git push --force-with-lease はローカルとリモートを比較し、ローカルが最新ならプッシュに成功します。 複数人でプロジェクトを進めている場合、git push -fしてしまうとリモートが最新なのにその変更を打ち消してしまう恐れがあります。
$git push --force-with-lease origin master

これでリモートの方もコミットメッセージを変更することができました!

Machida.rb #2に参加してみて

6/5(金)に開催されたMachida.rb#2に参加しました。オーガナイザーは株式会社ラグザイアの森塚さんです!

テーマ
  • Numberd parameters
  • irb
  • パターンマッチング
  • Enumerable#tally etc...
内容

Ruby2.7の新機能について例題を動かしながら教えていただきました。

Numberd parameters

# numbered parameters
data = { id: 1, name: "daichi", age: 23}

pp data.map {_1} => [[:id, 1], [:name, "daichi"], [:age, 23]]
pp data.map {[_1, _2]} => [[:id, 1], [:name, "daichi"], [:age, 23]]
 

 2つの出力結果が同じになるのは不思議に思いました。上の処理ではデータが全て入るのに、下の処理ではkeyとvalueがそれぞれ展開されて出力される。

パターンマッチング

# パターンマッチ
user = { name: "daichi", age: 23}

user in { name:, age: }

p name => "daichi"
p age => 23
 

inを使ってマッチする構文を見つけて記述してくれる。nameとageという変数に値が代入されている感じ。

tally

# tallyメソッド

pp [1,1,2,2,3,3,4,5,6,6,6].tally => {1=>2, 2=>2, 3=>2, 4=>1, 5=>1, 6=>3}

tallyメソッドを使うと同じ要素の数をhashで返してくれる。

出てきた内容で分からないことも多かったのでこれから勉強して少しずつわかることを増やしたいなと感じました!ツールとしてesa.ioを使用したのですがみんなで編集してる感じがしてとてもよかったです!

esa.io

感想

今回はフィヨルドで学習されている方も多く参加していて参加しやすかったです。

勉強会というものが初めてだったので少し緊張もあり不安でしたが、初心者にもわかりやすく解説していただいた皆さんには感謝しかないです...

こういった勉強会に参加するともっと知りたいと思うことが多いので今後もいろいろな勉強会に参加したいと感じました!