Git

個人プロジェクトのGitについて

一人しか操作する人間がおらず、複数端末でPushするユースケースがほとんどのため、以下のことに留意する。

  1. 修正したファイルがあれば、こまめにコミットする。
  2. ローカルにある程度コミットが溜まってきたら、git rebase -iでコミットをまとめる。RemoteにPushしたコミットでも、まとめたほうが良いものがあればrebaseして綺麗にしておく。
  3. 履歴をまとめる際、一般的にgit fetch; git merge --squashの方が安全だが、どうせ個人でしか使わないので昔の履歴を追いやすい形にしておきたい。
  4. rebaseされたコミットがRemoteにあった場合、ローカルの変更履歴をstashするなりしてからgit checkout -B master origin/masterのようにリモートブランチと同期を取る。

localのmasterブランチに既にコミットしていて、git pullでリモートから取り込んだ時に余計なmergeコミットが発生した時

  1. git reset --hard ORIG_HEADでマージ前に戻す
  2. git fetch
  3. git rebase --iで確認しながら操作する
  4. git push origin master

Git Submoduleで管理していたリポジトリ名が変更されたとき

下記の通りに一旦削除して、git submodule addしてあげればOK。

0. mv a/submodule a/submodule_tmp

1. git submodule deinit -f -- a/submodule    
2. rm -rf .git/modules/a/submodule
3. git rm -f a/submodule
# Note: a/submodule (no trailing slash)

# or, if you want to leave it in your working tree and have done step 0
3.   git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule

日本語ファイルの文字化け対応

次のコマンドを実行すればOK。

git config --local core.quotepath false

環境全体に設定したい場合は、 --globalオプションを忘れずに。

git config --global core.quotepath false

Gitの設定ができていなくて、間違えたEmail、名前が設定されたときに一括で変えるやり方

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Hiroki Uchida'; GIT_AUTHOR_EMAIL='nikuyoshi@gmail.com'; GIT_COMMITTER_NAME='Hiroki Uchida'; GIT_COMMITTER_EMAIL='nikuyoshi@gmail.com';" HEAD

Git の Commit Author と Commiter を変更する - Qiita

困ったときに参考になるサイト

Gitでやらかした時に使える19個の奥義