プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

Gitでやらかした事案

1. Author、コミッタを間違えた

事象

別のPCから作業、コミットした際に別ユーザになってしまった。

原因

gitconfigに明示的にユーザ情報が指定されていなかったため、作業環境のデフォルトユーザ情報が利用された。

防止策

git config --local user.name hoge
git config --local user.email hoge@gmail.com

復旧策

  • 1つ前のとき
git commit --amend -m "演習18.1-2" --author="hoge <hogeh@gmail.com>"
  • 過去の複数コミット
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='hoge'; GIT_AUTHOR_EMAIL='hoge@gmail.com'; GIT_COMMITTER_NAME='hoge'; GIT_COMMITTER_EMAIL='hoge@gmail.com';" HEAD

2. ファイルが消えた

事象

リモートとローカルで発生した不一致を解消しようとしたところローカルにのみあったファイルが消えた。

原因

複数のUIから色々と操作していたため、原因を絞り込めなかった。以下は見つかったログからの想定。

1. 事案1を解決しようと色々と試している中でinteractive rebaseが発生(git commit -ammend?)

$ git status
interactive rebase in progress; onto 743ee95

2. rebase用の臨時branchへ自動的に移動

$ git branch
* (no branch, rebasing master)  << rebase用臨時branch?
  master

3. master上にいないことに気付かないまま臨時ブランチ上で複数のファイルを作成

4. 後日、事案2の不一致解消作業の中でmasterに移動した際になくなった。

$ git checkout master
Warning: you are leaving 4 commits behind, not connected to
any of your branches:

  407e972 test commit  << これが怪しい
  407e972 test commit
  9d3460d Revert "Revert "演習18.1-2""
  0c2dc34 Revert "演習18.1-2"
  8fa1e71 演習18.1-2

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 407e972

Switched to branch 'master'

防止策

常にリポジトリの全体像を確認しながら作業する。
 - Eclipseは反映が遅いのでGit操作後はRefreshをこまめに実施する。  - SourceTreeは全体を把握するのが簡単。操作結果が反映されるのに少し時間がかかる。エラーログ等は残らない。  - CLIは全体を出力結果から把握するのに少し障壁が高い。エラーメッセージも含めて全ログが残る。 Ecpliseでコードを確認、SourceTreeで全体像を確認、簡単な処理はSourceTree、複雑な処理はCLIで画面にログを残しながら作業。

復旧策

1. checkout時のメッセージを参考に捨てられた変更用のブランチを作成

$ git branch new-master 407e972
$ git branch
* master
  new-master

2. 作成したブランチに移動

$ git checkout new-master
Switched to branch 'new-master'

3. git showで失われた変更があることを確認

4. masterに移動してnew-masterをマージ

5. 衝突を解消してコミット

6. リモートへプッシュ