0

リモートとローカルのコミットを分ける

前回gitlogを汚さない方法とか書いたけど、実はpush時に問題があって-fオプションを使う必要があったりで実はもう使ってない。
これはこれでいいのかもしれないけど、そもそもやりたかった事は以下の二つ。

  • ローカルのリポジトリは俺俺ハックや中途半端なものも置いておきたい。デイリーのバックアップ用途としても使いたい。
  • リモートのリポジトリはいつpullされるか分からないのでちゃんと動くものだけを置いておきたい。

未だやり方が定まったわけではないけど2つの方法を試し中。
■merge –squashを使う。
開発はmaster以外で必ず行い、リモートへプッシュできるものをmasterへ置く。

ここではdevというブランチで開発を行う。
$ git checkout -b dev

人にはみせれないようなcommitをたくさんする。
$ /Users/aokitakashi/gittest% git log --pretty=oneline
0fcbf10805bfca369ea39d32a3e280c59c5c0093 8割動いてきた
a987a670a442c7dc39db955e16c2f51bf1917413 4日修正分
3ec6ad445ab9bda66f05e00ecde6c1bea0615b8b 3日修正分
d319dbca73bc44d9412b22952674011d72d9560e 2日修正分

マスターに戻る
$ git checkout master

ここで–squashオプションを付けてマージするとコミット前のステージングに反映される。devブランチでのcommitログはなくなる。
devでの4つのcommit分を合わせて改めてcommitする。
$ git commit -m "ログイン用プラグイン実装"
$ git push

■ひたすらstashする。
masterでもok。
stashは一つしか保存できないと思い込んでいたけど、そんな事はない。
適当にバックアップとりたい時にstashする
$ git stash
$ git stash apply

履歴も見れる
$ git stash list

ワーキングディレクトリが最新なのでcommit。
$ git commit -m "ログイン用プラグイン実装"
$ git push

ちなみに前の状態に戻すのも簡単。
$ git checkout -b temp stash@{3}

参考: 6. 鎖をつなぐ最後の輪: stash と reflog

今のところ前者の方が扱いやすい感はある。
後者は名前・コメントがつけれなかったり、git stash/git stash applyの連打が気持ち悪い。

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です