Git tips

Last Update:2012/01/04

ほんのちょっとした修正でコミットログ要らないんだけど、という時

例えば行末のセミコロンを忘れただけ、とかそういう時。

その場合は、指定したコミットのログメッセージを使うようにする。

git commit -C HEAD -a --amend

HEADのところは有効なコミット名なら何でも良い。また、-Cオプションではなく-cにすると指定したコミットと同ログメッセージが記入された状態でエディタが立ち上がるので微修正ができる。

Note

これを使うとgithubにpushするときに怒られることがある。 こちらを参照 のこと。

Warning

コミットの訂正は直近のコミットで作業している場合だけにする。何かのミスをして、他のコミットを作成した後で修正が必要になったら、 revert を使うこと。

バイナリファイルの競合に対応

ブランチaにブランチbをマージした時に、sq3.dbがコンフリクトした場合。

ブランチaの方のsq3.dbを採用する場合。

git checkout --ours sq3.db

ブランチbの方を採用する場合。

git checkout --theirs sq3.db

その後にcommitすれば良い。

Untracked filesを全部削除したい時

git clean -fdx

オプションの意味は以下の通り。

f
–force、強制的に。
d
Untrackedなディレクトリも消す
x
ignore ruleを参照せず全てのUntracked fileを消す。

参考:

deletedをレポジトリから削除する

git statusでdeleted: hogehogeがたくさん出てきて消したいなぁという時はaddに-uオプションを付ける。

git add -u

その後はcommitすれば良い。

git pushでエラーが出た時

例えばgithubにpushする時、以下のようなエラーが出る場合がある。

$ git push origin master
To git@github.com:nato6933/hoge.git
! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:nato6933/hoge.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

これは githubのヘルプ によると以下の2つの理由が考えられる。

  • 同じブランチに他の人がpushしたりして、リモート先に既に変更が加えられている場合
  • git commit -C HEAD -a –amendやrebaseでコミットを訂正している場合

前者の場合は手元と整合性がとれていないということなので、pullしてからpushすればよい。

後者の場合は –forceオプションをつければよいが、他のユーザに問題を引き起こす場合もあるとのことなので、よく考えてから使った方がよい。