覚え書きブログ

gitの覚え書き(stash)

gitでpushしようとすると、remote repositoryの方が新しくて以下のようなエラーがでることがある。

> git push
...
error: failed to push some refs to 'https://github.com/hhachiya/xxx'
ヒント: Updates were rejected because a pushed branch tip is behind its remote

じゃあ、remote repositoryからpullして、local repositoryを最新にしようとすると、今度は、localとremoteで同じファイルを更新していて競合が起こることがある。

> git pull
...
Unpacking objects: 100% (6/6), done.
From https://github.com/hhachiya/xxx
error: Your local changes to the following files would be overwritten by merge:
	py-faster-rcnn/lib/fast_rcnn/test.py
Please, commit your changes or stash them before you can merge.
Aborting

そんな時に役にたつのが、stashオプションである。とりあえずlocalで更新した分を退避させておくことにより、pullをすることができるようになる。

> git stash
Saved working directory and index state WIP on xxxx: 0978f10 xxxx
HEAD is now at 0978f10 xxxx

> git pull
Merge made by the 'recursive' strategy.
 py-faster-rcnn/lib/fast_rcnn/test.py | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

しかし、これでは、せっかくローカルで更新した分が反映されなくなってしまうので、退避したものと、pullで最新になったlocal repositoryの差分を確認してみる。

> git stash list
stash@{0}: WIP on xxx: 0978f10 yyy
stash@{1}: WIP on xxx: dbc1af8 yyy

> git diff stash@{0}
diff --git a/py-faster-rcnn/lib/fast_rcnn/config.py b/py-faster-rcnn/lib/fast_rcnn/config.py
index bc1a81f..a8bb3e2 100755
--- a/py-faster-rcnn/lib/fast_rcnn/config.py
+++ b/py-faster-rcnn/lib/fast_rcnn/config.py
@@ -68,7 +68,7 @@ __C.TRAIN.BBOX_REG = True
 __C.TRAIN.BBOX_THRESH = 0.5
 
 # Iterations between snapshots
-__C.TRAIN.SNAPSHOT_ITERS = 10000
+__C.TRAIN.SNAPSHOT_ITERS = 1000
 
 # solver.prototxt specifies the snapshot path prefix, this adds an optional
 # infix to yield the path: <prefix>[_<infix>]_iters_XYZ.caffemodel
@@ -132,7 +132,7 @@ __C.TEST = edict()
...

これで、差分を確認し、問題がなければ退避したものを、local repositoryに反映させる。

> git stash apply stash@{0}