0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

.DS_Storeを再作成後にgitでcommitしたら、過去のcommit履歴変更ができなくなった話

0
Posted at

なにが起こったのか(端的に)

  • .DS_Storeファイルを消して、再度作成されたものをGithub上にpushしたら、過去のcommitメッセージを変えることができなくなってしまった話。

なにが起こったのか(全貌)

  1. とあるフォルダをGithub上のリモートリポジトリに上げる際に間違えて .DS_Storeもいっしょに上げてしまった。
  2. あとで修正できると思い、しらばく放置していた。(ここまでは間違ってない)
  3. さぁひと段落ついたから、Github上の.DS_Storeも消そうと思い、ローカルリポジトリの.DS_Storeを消し、それをGithubにpushした(これがすべての元凶)
  4. 「あ、そういえば過去のcommitメッセージも誤字ってたからいま変えとこう」と思い、git rebaseしようと思ったら、異変に気づく。
  5. 「あれ、、.DS_Storeファイルがある。。?」
  6. よくよく調べてみたら、.DS_Storeファイルは何度消してもよみがえるアンデットらしい。
  7. なので手段を変えて、.gitignoreファイルを作り、.DS_Storeファイルをgithub上に上げないようにした。
  8. しかし、すでにGithubに上がっている.DS_Storeファイルとローカルのファイルが異なると、conflictが永遠に出る始末
  9. pull, merge, stash, rm cacheなどを組み合わせて、リモートの.DS_Storeファイルを消し、conflict突破
  10. 「さぁ、過去のcommitメッセージの誤字を変えよう」とrebaseを用いて修正開始。
  11. 過去のDS_Storeファイルと現在のDS_Storeファイルが違うと、conflictの嵐 (<- いま)

解決方法の提案 (変えたいコミットメッセージは3つ前のものとする)

①通常の変え方(.DS_Storeはadd)

$ git rebase -i HEAD~5

vimが起動し、以下のようなファイルが開くので変えたい箇所のpickeditに変更

pick ea09821 コミットメッセージ1
pick ab9736c コミットメッセージ2
pick d74a8b1 コミットメッセージ3 // ここの先頭のpickをeditに変更
・
・

ファイルを保存したら、

$ git add .DS_Store
$ git commit --amend -m "新しいコミットメッセージ"
$ git rebase --continue

②通常の変え方(.DS_Storeは削除)

①のやり方の最後のrebase直前で

$ rm .DS_Store

にして、ファイルを削除

③rebaseでeditせずに、ほんとにコミットメッセージだけ変える方法

$ git rebase -i HEAD~5

vimが起動し、以下のようなファイルが開くので変えたい箇所のpickrに変更

pick ea09821 コミットメッセージ1
pick ab9736c コミットメッセージ2
r d74a8b1 コミットメッセージ3 // ここの先頭のpickをeditに変更
・
・

ファイルを保存したら、コメントを変更するためのvimが開くので、修正

コミットメッセージ3 // これを新しいメッセージに変更

# Please enter the commit message for your changes. Lines starting

これを保存したら、コミットメッセージの変更が完了し、rebaseも統合される

④上の3つやったあとに以下の文章が出てくる場合

// $ git rebase --continue後
You must edit all merge conflicts and then
mark them as resolved using git add

。。。。いやいやいやいやconflict解消したわ!てきな。
そのときはこれをしましょう。

$ git rebase --skip

git rebase --skip とは

⑤上でも無駄な場合、、

じゃあもう前のcommitのときに.gitignoreファイル作って「その時から.DS_Storeは無視してましたよ感」を出そう。

$ git rebase -i HEAD~5

vimが起動し、以下のようなファイルが開くので変えたい箇所のpickeditに変更

pick ea09821 コミットメッセージ1
pick ab9736c コミットメッセージ2
pick d74a8b1 コミットメッセージ3 // ここの先頭のpickをeditに変更
・
・

ファイルを保存したら、

$ vim .gitignore

以下の記述をして、保存して閉じる

.DS_Store

あとはコマンド操作

$ git rm -r --cached .
$ git commit --amend -m "新しいコミットメッセージ"
$ git rebase --continue

、、、これでもできなかったら、、、わからん。。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?