Help us understand the problem. What is going on with this article?

状況で使い分けるGit術 後編

More than 1 year has passed since last update.

この記事は JSL (日本システム技研) Advent Calendar 2018 - Qiita 25日目の記事です。(オオトリですなあ。。。)


状況で使い分けるGit術 前編
前半の記事からーー早6ヶ月
(前回の設定で記載されてたP上司一切でてきてなくて吹いた)


Advent Calendarという理由にかこつけて後編です。

前編では

  • コンフリクト時にMergeとRebaseで対応
  • コミットをrebaseでまとめる

について記述しました。
今回は「月君のやらかし事例とその対処」です。

設定

  • 月君 ... 最近調子に乗っており、ミスを犯すのは秒読み。SouceTree崇拝者。
  • A先輩 ... 開発チームメンバーの先輩。すぐ調子に乗る月君を見はさなず見守ってくれるデキる意識高い系。

前提

  • GitFlowを使用している
  • Macでvimを使用している

Mergeでコンフリクト時に、軽率なresetを行い・・・

月君は相変わらず慎重さにかけた実装を行っていました。

月君「さて、じゃあPush前に・・・moon_dev2の内容をMergeしておくか」
スクリーンショット 2018-12-25 10.59.04.png
Tips
SouceTreeからのMergeやRebaseは、対象ブランチの副ボタンクリックで出てくるコンテキストメニューから行えます
スクリーンショット 2018-12-25 10.59.33.png

しかし

スクリーンショット 2018-12-25 10.59.45.png

月君「まじかあ。。。」

〜数十分後〜

月君「あーもうコンフリクト地獄でよくわからん。origin/moon_devのコミットにresetしよう。そうすればもう大丈夫。なかったことにしよう」

スクリーンショット 2018-12-25 11.00.56.png

月君は気づきませんでした。
moon_devブランチのHEADはPushしていなかったことに。
そしてPushしていなかったコミットはかなり重要な変更だったということに。

月君「よし。一旦なかったことにしたぞ。これでコンフリクトとかもきれいさっp・・・」

スクリーンショット 2018-12-25 11.01.48.png

月君「重 要 な 変 更 の コ ミ ッ ト が 消 え て し ま っ た」

〜conflictを、軽率になかったことにしてはいけない〜

月君は焦るあまり、resetの--hardで嫌な記憶を抹消してしまったのです。
そして抹消したのは嫌な記憶のみならず、重要な記憶すらも…

〜そしてA先輩のもとへ〜

月君「かくかくしかじかで、やらかしてしまいました:scream:

A先輩「そろそろやらかすと思っていたよ:sweat:

A先輩「そういうときはreflogでリカバリしよう」

月君「それはいったい!?」

reflogとは個人の環境に保存されている参照ログです。

$ (moon_dev) git reflog

スクリーンショット 2018-12-25 11.38.12.png

参照ログがつらつら出てきました。
なくなってしまった重要な変更コミットも存在しています。

月君「む、重要なコミットは7417cd2だな。」

復元にはresetでHEADを指定します

$ (moon_dev) git reset --hard HEAD@{1}

スクリーンショット 2018-12-25 10.59.04.png

月君「戻ったーーーーーーー!!!」

こうして肝を冷やした月君は、この反省を生かして今後も実力を延ばしていくのでした。


前編後編の事例は実体験だったり。。。
本番masterにpush -fしてCI走ってデプロイされた話も書こうかと思いましたが、
書いてる最中に胃が痛くなったので断念。

ちなみに私は現在の職場でGitを知りました。
それまではエクセルに差分記録して手動Mergeというレガシー通り越して化石な運用でしたね。

今回はストーリー仕立てにしましたが、Gitに関して一番参考にしたQiitaの記事は⇣だと思います
Gitでやらかした時に使える19個の奥義

そんなこんなで2018年アドベントカレンダー終了。
来年もよろしくおねがいします!

moonwalkerpoday
ライン作業員(地獄)➔営業(出版/製本 or Web)➔PHPer(オレオレフレームワーク)➔Pythonista 一児を持つパパエンジニアです。現在シワの残らないアイロンのかけ方を修行中。
jsl
株式会社日本システム技研は、1976年に設立した長野に本社を構えるIT企業です。主にPython/Djangoの使用したWebアプリケーションの受託開発とプロダクト開発を行なっています。エンジニア向けコミュニティGEEKLAB.NAGANO( http://geeklab-nagano.com ) の運営をしています。
https://jsl.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした